package com.tinkerpop.gremlin.groovy.jsr223; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.TransactionalGraph; import com.tinkerpop.gremlin.Imports; import org.codehaus.groovy.control.customizers.ImportCustomizer; import java.util.HashSet; import java.util.Set; /** * @author Stephen Mallette (http://stephen.genoprime.com) */ public abstract class AbstractImportCustomizerProvider implements ImportCustomizerProvider { protected static final String DOT_STAR = ".*"; protected static final String EMPTY_STRING = ""; protected static final String PERIOD = "."; protected final Set<String> extraImports = new HashSet<String>(); protected final Set<String> extraStaticImports = new HashSet<String>(); @Override public ImportCustomizer getImportCustomizer() { final ImportCustomizer ic = new ImportCustomizer(); for (final String imp : Imports.getImports()) { ic.addStarImports(imp.replace(DOT_STAR, EMPTY_STRING)); } ic.addImports("com.tinkerpop.gremlin.Tokens.T"); ic.addStarImports("com.tinkerpop.gremlin.groovy"); ic.addStaticImport(Direction.class.getName(), Direction.OUT.toString()); ic.addStaticImport(Direction.class.getName(), Direction.IN.toString()); ic.addStaticImport(Direction.class.getName(), Direction.BOTH.toString()); ic.addStaticImport(TransactionalGraph.Conclusion.class.getName(), TransactionalGraph.Conclusion.SUCCESS.toString()); ic.addStaticImport(TransactionalGraph.Conclusion.class.getName(), TransactionalGraph.Conclusion.FAILURE.toString()); importExtras(ic); importExtraStatics(ic); return ic; } private void importExtraStatics(final ImportCustomizer ic) { for (final String extraStaticImport : extraStaticImports) { if (extraStaticImport.endsWith(DOT_STAR)) { ic.addStaticStars(extraStaticImport.replace(DOT_STAR, EMPTY_STRING)); } else { final int place = extraStaticImport.lastIndexOf(PERIOD); ic.addStaticImport(extraStaticImport.substring(0, place), extraStaticImport.substring(place + 1)); } } } private void importExtras(final ImportCustomizer ic) { for (final String extraImport : extraImports) { if (extraImport.endsWith(DOT_STAR)) { ic.addStarImports(extraImport.replace(DOT_STAR, EMPTY_STRING)); } else { ic.addImports(extraImport); } } } }