/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.guvnor.server.util; /* * Copyright 2005 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.jar.JarInputStream; import org.drools.guvnor.client.common.AssetFormats; import org.drools.guvnor.server.ServiceImplementation; import org.drools.guvnor.server.builder.BRMSPackageBuilder; import org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine; import org.drools.ide.common.server.rules.SuggestionCompletionLoader; import org.drools.lang.descr.ImportDescr; import org.drools.lang.dsl.DSLTokenizedMappingFile; import org.drools.repository.AssetItem; import org.drools.repository.AssetItemIterator; import org.drools.repository.PackageItem; /** * This decorates the suggestion completion loader with BRMS specific stuff. * * @author Michael Neale */ public class BRMSSuggestionCompletionLoader extends SuggestionCompletionLoader { private final Set<ImportDescr> extraImports = new HashSet<ImportDescr>(); public BRMSSuggestionCompletionLoader() { super(); initAndAttachExtraImportsProvider(); } public BRMSSuggestionCompletionLoader(ClassLoader classLoader) { super(classLoader); initAndAttachExtraImportsProvider(); } /** * Initialize the extra Imports and creates a Provider to use them. */ private void initAndAttachExtraImportsProvider(){ this.extraImports.add(new ImportDescr("java.util.Set")); this.extraImports.add(new ImportDescr("java.util.List")); this.extraImports.add(new ImportDescr("java.util.Collection")); this.extraImports.add(new ImportDescr("java.lang.Number")); this.addExternalImportDescrProvider(new ExternalImportDescrProvider() { public Set<ImportDescr> getImportDescrs() { return extraImports; } }); } public SuggestionCompletionEngine getSuggestionEngine(PackageItem pkg) { StringBuilder buf = new StringBuilder(); AssetItemIterator it = pkg.listAssetsByFormat(new String[]{AssetFormats.DRL_MODEL}); while (it.hasNext()) { AssetItem as = it.next(); buf.append(as.getContent()); buf.append('\n'); } return super.getSuggestionEngine(ServiceImplementation.getDroolsHeader(pkg) + "\n" + buf.toString(), getJars(pkg), getDSLMappingFiles(pkg), getDataEnums(pkg)); } private List<String> getDataEnums(PackageItem pkg) { Iterator it = pkg.listAssetsByFormat(new String[]{AssetFormats.ENUMERATION}); List<String> list = new ArrayList<String>(); while (it.hasNext()) { AssetItem item = (AssetItem) it.next(); list.add(item.getContent()); } return list; } private List<DSLTokenizedMappingFile> getDSLMappingFiles(PackageItem pkg) { return BRMSPackageBuilder.getDSLMappingFiles(pkg, new BRMSPackageBuilder.DSLErrorEvent() { public void recordError(AssetItem asset, String message) { errors.add(asset.getName() + " : " + message); } }); } private List<JarInputStream> getJars(PackageItem pkg) { return BRMSPackageBuilder.getJars(pkg); } }