/* * 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.client.explorer; import java.util.Map; import org.drools.guvnor.client.common.AssetFormats; import org.drools.guvnor.client.common.GenericCallback; import org.drools.guvnor.client.messages.Constants; import org.drools.guvnor.client.resources.Images; import org.drools.guvnor.client.rpc.PackageConfigData; import org.drools.guvnor.client.rpc.RepositoryServiceFactory; import org.drools.guvnor.client.security.Capabilities; import org.drools.guvnor.client.security.CapabilitiesManager; import org.drools.guvnor.client.util.Util; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.OpenEvent; import com.google.gwt.event.logical.shared.OpenHandler; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; /* * This class contains static node config for BRMS' explorer widgets */ public class ExplorerNodeConfig { private static Constants constants = ((Constants) GWT.create( Constants.class )); private static Images images = (Images) GWT.create( Images.class ); //Browse public static final String FIND_ID = "find"; public static String CATEGORY_ROOT_ID = "rootcategory"; //NON-NLS public static String CATEGORY_ID = "category"; //NON-NLS public static String STATES_ID = "states"; //NON-NLS public static String STATES_ROOT_ID = "rootstates"; //NON-NLS public static final String RECENT_EDITED_ID = "recentEdited"; public static final String RECENT_VIEWED_ID = "recentViewed"; public static final String INCOMING_ID = "incoming"; //QA public static final String TEST_SCENARIOS_ID = "testScenarios"; public static final String TEST_SCENARIOS_ROOT_ID = "roottestScenarios"; public static final String ANALYSIS_ID = "analysis"; public static final String ANALYSIS_ROOT_ID = "rootanalysis"; //Package snapshot public static final String PACKAGE_SNAPSHOTS = "packageSnapshots"; public static TreeItem getPackageItemStructure(String packageName, String uuid, final Map<TreeItem, String> itemWidgets) { TreeItem pkg = new TreeItem( Util.getHeader( images.packages(), packageName ) ); itemWidgets.put( pkg, uuid ); TreeItem item = new TreeItem( Util.getHeader( images.ruleAsset(), constants.BusinessRuleAssets() ) ); item.setUserObject( AssetFormats.BUSINESS_RULE_FORMATS ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.technicalRuleAssets(), constants.TechnicalRuleAssets() ) ); itemWidgets.put( item, AssetFormats.DRL ); item.setUserObject( new String[]{AssetFormats.DRL} ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.functionAssets(), constants.Functions() ) ); itemWidgets.put( item, AssetFormats.FUNCTION ); item.setUserObject( new String[]{AssetFormats.FUNCTION} ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.dsl(), constants.DSLConfigurations() ) ); itemWidgets.put( item, AssetFormats.DSL ); item.setUserObject( new String[]{AssetFormats.DSL} ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.modelAsset(), constants.Model() ) ); itemWidgets.put( item, AssetFormats.DRL_MODEL ); item.setUserObject( new String[]{AssetFormats.DRL_MODEL, AssetFormats.MODEL} ); pkg.addItem( item ); if ( Preferences.getBooleanPref( "flex-bpel-editor" ) ) { item = new TreeItem( Util.getHeader( images.ruleflowSmall(), constants.RuleFlows() ) ); itemWidgets.put( item, AssetFormats.RULE_FLOW_RF ); item.setUserObject( new String[]{AssetFormats.RULE_FLOW_RF, AssetFormats.BPMN2_PROCESS, AssetFormats.BPEL_PACKAGE} ); pkg.addItem( item ); } else { item = new TreeItem( Util.getHeader( images.ruleflowSmall(), constants.RuleFlows() ) ); itemWidgets.put( item, AssetFormats.RULE_FLOW_RF ); item.setUserObject( new String[]{AssetFormats.RULE_FLOW_RF, AssetFormats.BPMN2_PROCESS} ); pkg.addItem( item ); } item = new TreeItem( Util.getHeader( images.enumeration(), constants.Enumerations() ) ); itemWidgets.put( item, AssetFormats.ENUMERATION ); item.setUserObject( new String[]{AssetFormats.ENUMERATION} ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.testManager(), constants.TestScenarios() ) ); itemWidgets.put( item, AssetFormats.TEST_SCENARIO ); item.setUserObject( new String[]{AssetFormats.TEST_SCENARIO} ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.newFile(), constants.XMLProperties() ) ); itemWidgets.put( item, AssetFormats.PROPERTIES ); item.setUserObject( new String[]{AssetFormats.PROPERTIES} ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.newFile(), constants.OtherAssetsDocumentation() ) ); itemWidgets.put( item, AssetFormats.PROPERTIES ); item.setUserObject( new String[0] ); pkg.addItem( item ); item = new TreeItem( Util.getHeader( images.workingset(), constants.WorkingSets() ) ); itemWidgets.put( item, AssetFormats.WORKING_SET ); item.setUserObject( new String[]{AssetFormats.WORKING_SET} ); pkg.addItem( item ); return pkg; } public static void setupDeploymentTree(Tree tree, Map<TreeItem, String> itemWidgets) { TreeItem root = tree.addItem( Util.getHeader( images.chartOrganisation(), constants.PackageSnapshots() ) ); root.setState( true ); itemWidgets.put( root, PACKAGE_SNAPSHOTS ); deploymentListPackages( root ); } private static void deploymentListPackages(final TreeItem root) { RepositoryServiceFactory.getService().listPackages( new GenericCallback<PackageConfigData[]>() { public void onSuccess(PackageConfigData[] values) { PackageHierarchy ph = new PackageHierarchy(); for ( PackageConfigData val : values ) { ph.addPackage( val ); } for ( PackageHierarchy.Folder hf : ph.root.children ) { buildDeploymentTree( root, hf ); } } } ); } private static void buildDeploymentTree(TreeItem root, PackageHierarchy.Folder fldr) { if ( fldr.conf != null ) { TreeItem pkg = new TreeItem( Util.getHeader( images.snapshotSmall(), fldr.conf.name ) ); pkg.setUserObject( fldr.conf ); pkg.addItem( new TreeItem( constants.PleaseWaitDotDotDot() ) ); root.addItem( pkg ); } else { TreeItem tn = new TreeItem( Util.getHeader( images.emptyPackage(), fldr.name ) ); root.addItem( tn ); for ( PackageHierarchy.Folder c : fldr.children ) { buildDeploymentTree( tn, c ); } } } public static Tree getAdminStructure(Map<TreeItem, String> itemWidgets) { Tree tree = new Tree(); tree.setAnimationEnabled( true ); Object[][] adminStructure = new Object[][]{{constants.Category(), images.categorySmall(), "0"}, {constants.Status(), images.statusSmall(), "2"}, {constants.Archive(), images.backupSmall(), "1"}, {constants.EventLog(), images.error(), "4"}, {constants.UserPermission(), images.icoUsersSmall(), "5"}, {constants.ImportExport(), images.saveEdit(), "3"}, {constants.RulesVerification(), images.ruleVerification(), "7"}, {constants.RepositoryConfiguration(), images.config(), "8"}, {constants.About(), images.information(), "6"}}; for ( int i = 0; i < adminStructure.length; i++ ) { Object[] packageData = adminStructure[i]; TreeItem localChildNode = new TreeItem( Util.getHeader( (ImageResource) packageData[1], (String) packageData[0] ) ); itemWidgets.put( localChildNode, (String) packageData[2] ); tree.addItem( localChildNode ); } return tree; } public static void setupBrowseTree(Tree tree, Map<TreeItem, String> itemWidgets) { TreeItem root = tree.addItem( Util.getHeader( images.ruleAsset(), constants.AssetsTreeView() ) ); TreeItem find = root.addItem( Util.getHeader( images.find(), constants.Find() ) ); itemWidgets.put( find, FIND_ID ); TreeItem inbox = getInboxStructure( itemWidgets ); inbox.setState( true ); root.addItem( inbox ); if ( CapabilitiesManager.getInstance().shouldShow( Capabilities.SHOW_PACKAGE_VIEW ) ) { final TreeItem byStatus = new TreeItem( Util.getHeader( images.statusSmall(), constants.ByStatus() ) ); itemWidgets.put( byStatus, STATES_ROOT_ID ); setupStatesStructure( byStatus, itemWidgets ); root.addItem( byStatus ); } TreeItem byCategory = new TreeItem( Util.getHeader( images.chartOrganisation(), constants.ByCategory() ) ); itemWidgets.put( byCategory, CATEGORY_ROOT_ID ); setupCategoriesStructure( byCategory, itemWidgets ); root.addItem( byCategory ); } private static TreeItem getInboxStructure(Map<TreeItem, String> itemWidgets) { TreeItem inbox = new TreeItem( Util.getHeader( images.inbox(), constants.Inbox() ) ); TreeItem incomingChanges = new TreeItem( Util.getHeader( images.categorySmall(), constants.IncomingChanges() ) ); itemWidgets.put( incomingChanges, INCOMING_ID ); inbox.addItem( incomingChanges ); TreeItem recentOpened = new TreeItem( Util.getHeader( images.categorySmall(), constants.RecentlyOpened() ) ); itemWidgets.put( recentOpened, RECENT_VIEWED_ID ); inbox.addItem( recentOpened ); TreeItem recentEdited = new TreeItem( Util.getHeader( images.categorySmall(), constants.RecentlyEdited() ) ); itemWidgets.put( recentEdited, RECENT_EDITED_ID ); inbox.addItem( recentEdited ); return inbox; } public static void setupCategoriesStructure(TreeItem byCategory, final Map<TreeItem, String> itemWidgets) { doCategoryNode( byCategory, "/", itemWidgets ); } private static void doCategoryNode(final TreeItem treeItem, final String path, final Map<TreeItem, String> itemWidgets) { infanticide( treeItem ); RepositoryServiceFactory.getService().loadChildCategories( path, new GenericCallback<String[]>() { public void onSuccess(String[] value) { if ( value.length == 0 ) { if ( path.equals( "/" ) && CapabilitiesManager.getInstance().shouldShow( Capabilities.SHOW_ADMIN ) ) { RepositoryServiceFactory.getService().listPackages( new GenericCallback<PackageConfigData[]>() { public void onSuccess(PackageConfigData[] result) { if ( result.length == 1 ) { doNewRepoDialog(); } } } ); } infanticide( treeItem ); } else { for ( int i = 0; i < value.length; i++ ) { final String current = value[i]; final TreeItem childNode = new TreeItem( Util.getHeader( images.categorySmall(), current ) ); //ID for category tabs. String widgetId = CATEGORY_ID + "-" + ((path.equals( "/" )) ? current : path + "/" + current); itemWidgets.put( childNode, widgetId ); treeItem.addItem( childNode ); childNode.addItem( new TreeItem( Util.getHeader( images.categorySmall(), constants.PleaseWaitDotDotDot() ) ) ); childNode.getTree().addOpenHandler( new OpenHandler<TreeItem>() { boolean expanding = false; public void onOpen(OpenEvent<TreeItem> event) { if ( !expanding && event.getTarget() == childNode ) { expanding = true; String widgetID = itemWidgets.get( event.getTarget() ); String path = widgetID.substring( widgetID.indexOf( "-" ) + 1 ); infanticide( childNode ); doCategoryNode( childNode, path, itemWidgets ); expanding = false; } } } ); } } } private void doNewRepoDialog() { NewRepoDialog diag = new NewRepoDialog(); diag.show(); } } ); } private static void infanticide(final TreeItem treeNode) { treeNode.removeItems(); } public static void setupStatesStructure(final TreeItem byStatus, final Map<TreeItem, String> itemWidgets) { RepositoryServiceFactory.getService().listStates( new GenericCallback<String[]>() { public void onSuccess(String[] value) { for ( int i = 0; i < value.length; i++ ) { TreeItem childNode = new TreeItem( Util.getHeader( images.categorySmall(), value[i] ) ); //ID for state tabs. String widgetID = STATES_ID + "-" + value[i]; itemWidgets.put( childNode, widgetID ); byStatus.addItem( childNode ); } } } ); } public static Tree getQAStructure(final Map<TreeItem, String> itemWidgets) { Tree tree = new Tree(); tree.setAnimationEnabled( true ); final TreeItem scenarios = new TreeItem( Util.getHeader( images.testManager(), constants.TestScenariosInPackages() ) ); scenarios.addItem( new TreeItem( constants.PleaseWaitDotDotDot() ) ); tree.addItem( scenarios ); itemWidgets.put( scenarios, TEST_SCENARIOS_ROOT_ID ); final TreeItem analysis = new TreeItem( Util.getHeader( images.analyze(), constants.Analysis() ) ); analysis.addItem( new TreeItem( constants.PleaseWaitDotDotDot() ) ); itemWidgets.put( analysis, ANALYSIS_ROOT_ID ); if ( Preferences.getBooleanPref( "verifier" ) ) { tree.addItem( analysis ); } return tree; } }