import org.simantics.db.common.request.UnaryRead;
import org.simantics.db.common.utils.NameUtils;
import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.genericrelation.Dependencies;
import org.simantics.db.layer0.genericrelation.IndexQueries;
import org.simantics.db.service.GraphChangeListenerSupport;
import org.simantics.layer0.Layer0;
import org.simantics.scl.runtime.function.Function;
import org.simantics.scl.runtime.function.Function1;
-import org.simantics.scl.runtime.tuple.Tuple3;
import org.simantics.scl.runtime.tuple.Tuple4;
import org.simantics.structural.stubs.StructuralResource2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import gnu.trove.set.hash.THashSet;
*
* <p>
* The type of the function is expected to be:
- * <code>ReadGraph => Resource -> String -> Integer -> List<Map<String,Object>></code>
+ * <code>ReadGraph => Resource -> String -> Integer -> List<Resource></code>
*
* @author Tuukka Lehtonen
*
*/
public class CaseInsensitiveComponentFunctionNamingStrategy extends ComponentNamingStrategyBase {
+ private static final Logger LOGGER = LoggerFactory.getLogger(CaseInsensitiveComponentFunctionNamingStrategy.class);
protected static final boolean DEBUG_INDEX_SEARCH = false | DEBUG_ALL;
@SuppressWarnings("rawtypes")
synchronized (this) {
- String search = "Name:" + lowercaseName + "*";
+ String search = IndexQueries.escapeTerm(Dependencies.FIELD_NAME_SEARCH, lowercaseName, true) + "*"; //$NON-NLS-1$
@SuppressWarnings("unchecked")
List<Resource> components = (List<Resource>) index.apply(graph, indexRoot, search, Integer.MAX_VALUE);
Set<Resource> rs = new THashSet<Resource>();
for (Resource componentResult : components) {
if (DEBUG_INDEX_SEARCH)
- System.out.println(getClass().getSimpleName() + ": found " + componentResult);
+ LOGGER.info(getClass().getSimpleName() + ": found " + componentResult);
String n = graph.getPossibleRelatedValue(componentResult, L0.HasName, Bindings.STRING);
if (n != null && n.toLowerCase().equals(lowercaseName))
rs.add(componentResult);
Layer0 L0 = Layer0.getInstance(graph);
for (Resource componentResult : components) {
if (DEBUG_INDEX_SEARCH)
- System.out.println(getClass().getSimpleName() + ": found " + componentResult);
+ LOGGER.info(getClass().getSimpleName() + ": found " + componentResult);
String name = graph.getPossibleRelatedValue(componentResult, L0.HasName, Bindings.STRING);
if (name != null)
reserved.add(name);
}
- System.err.println("found " + reserved.size() + " components");
+ LOGGER.warn("found " + reserved.size() + " components");
return reserved;
Resource componentType, String proposition, boolean acceptProposition) throws NamingException, DatabaseException {
Resource indexRoot = graph.syncRequest(new PossibleIndexRoot(configurationRoot));
if (indexRoot == null) {
- System.err.println("Could not find index root from configuration root '" + NameUtils.getSafeName(graph, configurationRoot, true) + "'");
+ LOGGER.warn("Could not find index root from configuration root '" + NameUtils.getSafeName(graph, configurationRoot, true) + "'");
if(fallbackStrategy == null)
fallbackStrategy =
new CaseInsensitiveComponentNamingStrategy2(graph.getService(GraphChangeListenerSupport.class), generatedNameFormat);
synchronized (this) {
- String search = "Name:" + proposition + "*";
+ String search = Dependencies.FIELD_NAME_SEARCH + ":" + IndexQueries.escape(proposition.toLowerCase(), true) + "*"; //$NON-NLS-1$ //$NON-NLS-2$
Set<String> reserved = graph.syncRequest(new ComponentsRequest(new Tuple4(indexRoot, index, search, getComparator())), TransientCacheAsyncListener.instance());
cache.addRequested(result);
if (DEBUG_INDEX_SEARCH)
- System.out.println(getClass().getSimpleName() + ": validated instance name " + result);
+ LOGGER.info(getClass().getSimpleName() + ": validated instance name " + result);
return result;
}
if (propositionPreFilter != null)
proposition = propositionPreFilter.apply(proposition);
- String search = "Name:" + IndexQueries.escape( proposition ) + "*";
+ String search = IndexQueries.quoteTerm(Dependencies.FIELD_NAME_SEARCH, proposition.toLowerCase());
@SuppressWarnings("unchecked")
List<Resource> components = (List<Resource>) index.apply(graph, indexRoot, search, Integer.MAX_VALUE);
if (DEBUG_INDEX_SEARCH)
- System.out.println(getClass().getSimpleName() + ": found " + components.size()
+ LOGGER.info(getClass().getSimpleName() + ": found " + components.size()
+ " index results for index root " + indexRoot + " & configurationRoot " + configurationRoot
+ " & proposition '" + proposition + "':");
reserved.clear();
for (Resource componentResult : components) {
if (DEBUG_INDEX_SEARCH)
- System.out.println(getClass().getSimpleName() + ": found " + componentResult);
+ LOGGER.info(getClass().getSimpleName() + ": found " + componentResult);
String name = graph.getPossibleRelatedValue(componentResult, L0.HasName, Bindings.STRING);
if (name != null)
reserved.add(name);
result.add(name);
if (DEBUG_INDEX_SEARCH)
- System.out.println(getClass().getSimpleName() + ": validated instance name " + proposition + " -> " + name);
+ LOGGER.info(getClass().getSimpleName() + ": validated instance name " + proposition + " -> " + name);
}
if (DEBUG_INDEX_SEARCH)
- System.out.println(getClass().getSimpleName() + ": validated instance names " + propositions + " -> " + result);
+ LOGGER.info(getClass().getSimpleName() + ": validated instance names " + propositions + " -> " + result);
return result;
}