|
|
|
/**
|
|
|
|
* IndexSchemaFulltext_p
|
|
|
|
* Copyright 2011 by Michael Peter Christen, mc@yacy.net, Frankfurt am Main, Germany
|
|
|
|
* First released 13.02.2013 at http://yacy.net
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* along with this program in the file lgpl21.txt
|
|
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.IOException;
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
|
|
|
import net.yacy.cora.federate.solr.SchemaConfiguration;
|
|
|
|
import net.yacy.cora.federate.solr.SchemaDeclaration;
|
|
|
|
import net.yacy.cora.protocol.RequestHeader;
|
|
|
|
import net.yacy.cora.util.ConcurrentLog;
|
|
|
|
import net.yacy.search.Switchboard;
|
|
|
|
import net.yacy.search.schema.CollectionSchema;
|
|
|
|
import net.yacy.search.schema.WebgraphConfiguration;
|
|
|
|
import net.yacy.search.schema.WebgraphSchema;
|
|
|
|
import net.yacy.server.serverObjects;
|
|
|
|
import net.yacy.server.serverSwitch;
|
|
|
|
|
|
|
|
public class IndexSchema_p {
|
|
|
|
|
|
|
|
public static serverObjects respond(@SuppressWarnings("unused") final RequestHeader header, final serverObjects post, final serverSwitch env) {
|
|
|
|
// return variable that accumulates replacements
|
|
|
|
final serverObjects prop = new serverObjects();
|
|
|
|
final Switchboard sb = (Switchboard) env;
|
|
|
|
|
|
|
|
String schemaName = CollectionSchema.CORE_NAME;
|
|
|
|
if (post != null) schemaName = post.get("core", schemaName);
|
|
|
|
SchemaConfiguration cs = schemaName.equals(CollectionSchema.CORE_NAME) ? sb.index.fulltext().getDefaultConfiguration() : sb.index.fulltext().getWebgraphConfiguration();
|
|
|
|
|
|
|
|
if (post != null && post.containsKey("set")) {
|
|
|
|
// read index schema table flags
|
|
|
|
final Iterator<SchemaConfiguration.Entry> i = cs.entryIterator();
|
|
|
|
SchemaConfiguration.Entry entry;
|
|
|
|
boolean modified = false; // flag to remember changes
|
|
|
|
while (i.hasNext()) {
|
|
|
|
entry = i.next();
|
|
|
|
if (post.containsKey("schema_solrfieldname_" + entry.key()) ) { // can't use schem_... checkbox only contained if checked
|
|
|
|
// only handle displayed (contained) fields
|
|
|
|
final String v = post.get("schema_" + entry.key());
|
|
|
|
final String sfn = post.get("schema_solrfieldname_" + entry.key());
|
|
|
|
if (sfn != null) {
|
|
|
|
// set custom solr field name
|
|
|
|
if (!sfn.equals(entry.getValue())) {
|
|
|
|
entry.setValue(sfn);
|
|
|
|
modified = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// set enable flag
|
|
|
|
final boolean c = v != null && v.equals("checked");
|
|
|
|
if (entry.enabled() != c) {
|
|
|
|
entry.setEnable(c);
|
|
|
|
modified = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (modified) { // save settings to config file if modified
|
|
|
|
try {
|
|
|
|
cs.commit();
|
|
|
|
sb.index.fulltext().getDefaultConfiguration().commit();
|
|
|
|
sb.index.fulltext().getWebgraphConfiguration().commit();
|
|
|
|
modified = false;
|
|
|
|
} catch (final IOException ex) {}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (post != null && post.containsKey("resetselectiontodefault")) {
|
|
|
|
// reset Solr field selection to default configuration
|
|
|
|
File solrInitFile;
|
|
|
|
if (cs instanceof WebgraphConfiguration) { // get default configuration for webgraph
|
|
|
|
solrInitFile = new File(sb.getAppPath(), "defaults/" + Switchboard.SOLR_WEBGRAPH_CONFIGURATION_NAME);
|
|
|
|
} else { // or get default configuration for collection1
|
|
|
|
solrInitFile = new File(sb.getAppPath(), "defaults/" + Switchboard.SOLR_COLLECTION_CONFIGURATION_NAME);
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
SchemaConfiguration solrConfigurationInit = new SchemaConfiguration(solrInitFile);
|
|
|
|
Iterator<SchemaConfiguration.Entry> it = cs.entryIterator(); // get current configuration
|
|
|
|
while (it.hasNext()) { // iterate over entries and enable/disable according to default
|
|
|
|
SchemaConfiguration.Entry etr = it.next();
|
|
|
|
etr.setEnable(solrConfigurationInit.contains(etr.key()));
|
|
|
|
}
|
|
|
|
cs.commit();
|
|
|
|
} catch (final IOException ex) {
|
|
|
|
ConcurrentLog.warn("IndexSchema", "file " + solrInitFile.getAbsolutePath() + " not found");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int c = 0;
|
|
|
|
boolean dark = false;
|
|
|
|
// use enum SolrField to keep defined order
|
|
|
|
SchemaDeclaration[] cc = schemaName.equals(CollectionSchema.CORE_NAME) ? CollectionSchema.values() : WebgraphSchema.values();
|
|
|
|
String filterstr = null;
|
|
|
|
// set active filter button property
|
|
|
|
boolean viewall = (post == null) || (filterstr = post.get("filter")) == null;
|
|
|
|
boolean viewactiveonly = !viewall && "active".equals(filterstr);
|
|
|
|
boolean viewdisabledonly = !viewall && "disabled".equals(filterstr);
|
|
|
|
prop.put("viewall",viewall);
|
|
|
|
prop.put("activeonly", viewactiveonly);
|
|
|
|
prop.put("disabledonly", viewdisabledonly);
|
|
|
|
|
|
|
|
for(SchemaDeclaration field : cc) {
|
|
|
|
boolean showline = viewactiveonly ? cs.contains(field.name()) : (viewdisabledonly ? cs.containsDisabled(field.name()): true);
|
|
|
|
if (showline) {
|
|
|
|
prop.put("schema_" + c + "_dark", dark ? 1 : 0); dark = !dark;
|
|
|
|
prop.put("schema_" + c + "_checked", cs.contains(field.name()) ? 1 : 0);
|
|
|
|
prop.put("schema_" + c + "_required", field.isMandatory() ? 1 : 0);
|
|
|
|
prop.putHTML("schema_" + c + "_key", field.name());
|
|
|
|
prop.putHTML("schema_" + c + "_solrfieldname",field.name().equalsIgnoreCase(field.getSolrFieldName()) ? "" : field.getSolrFieldName());
|
|
|
|
if (field.getComment() != null) prop.putHTML("schema_" + c + "_comment",field.getComment());
|
|
|
|
c++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
prop.put("schema", c);
|
|
|
|
|
|
|
|
prop.put("cores_" + 0 + "_name", CollectionSchema.CORE_NAME);
|
|
|
|
prop.put("cores_" + 0 + "_selected", CollectionSchema.CORE_NAME.equals(schemaName) ? 1 : 0);
|
|
|
|
prop.put("cores_" + 1 + "_name", WebgraphSchema.CORE_NAME);
|
|
|
|
prop.put("cores_" + 1 + "_selected", WebgraphSchema.CORE_NAME.equals(schemaName) ? 1 : 0);
|
|
|
|
prop.put("cores", 2);
|
|
|
|
prop.put("core", schemaName);
|
|
|
|
|
|
|
|
// return rewrite properties
|
|
|
|
return prop;
|
|
|
|
}
|
|
|
|
}
|