[jboss-svn-commits] JBL Code SVN: r21135 - in labs/jbossrules/trunk: drools-guvnor/src/main/java/org/drools/guvnor/server/security and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jul 20 22:54:47 EDT 2008
Author: jervisliu
Date: 2008-07-20 22:54:47 -0400 (Sun, 20 Jul 2008)
New Revision: 21135
Added:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/CategoryFilter.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolver.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryPathType.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageNameType.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageUUIDType.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermission.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolverTest.java
Removed:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedAuthenticator.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermission.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionStore.java
Modified:
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/AssetItemFilter.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/PackageFilter.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionResolver.java
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/PackageBasedPermissionResolverTest.java
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
Log:
Added role based authorization for category path. Added Analyst type.
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/AssetItemFilter.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/AssetItemFilter.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/AssetItemFilter.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -15,6 +15,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+import org.drools.guvnor.server.security.PackageUUIDType;
import org.drools.repository.AssetItem;
import org.drools.repository.RepositoryFilter;
import org.jboss.seam.contexts.Contexts;
@@ -30,8 +31,7 @@
if (!Contexts.isSessionContextActive()) {
return true;
} else {
- return Identity.instance().hasPermission("ignoredanyway", action,
- ((AssetItem) artifact).getPackage().getUUID());
+ return Identity.instance().hasPermission(new PackageUUIDType(((AssetItem) artifact).getPackage().getUUID()), action);
}
}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/CategoryFilter.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/CategoryFilter.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/CategoryFilter.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,39 @@
+package org.drools.guvnor.server;
+/*
+ * 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 org.drools.guvnor.server.security.CategoryPathType;
+import org.drools.repository.RepositoryFilter;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.security.Identity;
+
+public class CategoryFilter implements RepositoryFilter {
+
+ public boolean accept(Object artifact, String action) {
+ if (!(artifact instanceof String))
+ return false;
+
+ // for GWT hosted mode - debug only
+ if (!Contexts.isSessionContextActive()) {
+ return true;
+ } else {
+ return Identity.instance().hasPermission(new CategoryPathType((String)artifact), null);
+ }
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/PackageFilter.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/PackageFilter.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/PackageFilter.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -1,7 +1,4 @@
package org.drools.guvnor.server;
-
-import org.drools.guvnor.client.rpc.PackageConfigData;
-import org.drools.repository.RepositoryFilter;
/*
* Copyright 2005 JBoss Inc
*
@@ -17,6 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+
+
+import org.drools.guvnor.client.rpc.PackageConfigData;
+import org.drools.guvnor.server.security.PackageUUIDType;
+import org.drools.repository.RepositoryFilter;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.security.Identity;
@@ -30,8 +33,7 @@
if (!Contexts.isSessionContextActive()) {
return true;
} else {
- return Identity.instance().hasPermission("ignoredanyway", action,
- ((PackageConfigData) artifact).uuid);
+ return Identity.instance().hasPermission(new PackageUUIDType(((PackageConfigData) artifact).uuid), action);
}
}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -1,4 +1,5 @@
package org.drools.guvnor.server;
+
/*
* Copyright 2005 JBoss Inc
*
@@ -15,7 +16,6 @@
* limitations under the License.
*/
-
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -83,6 +83,9 @@
import org.drools.guvnor.server.contenthandler.IRuleAsset;
import org.drools.guvnor.server.contenthandler.IValidating;
import org.drools.guvnor.server.contenthandler.ModelContentHandler;
+import org.drools.guvnor.server.security.CategoryPathType;
+import org.drools.guvnor.server.security.PackageNameType;
+import org.drools.guvnor.server.security.PackageUUIDType;
import org.drools.guvnor.server.security.RoleTypes;
import org.drools.guvnor.server.util.BRMSSuggestionCompletionLoader;
import org.drools.guvnor.server.util.LoggingHelper;
@@ -124,431 +127,473 @@
import com.google.gwt.user.client.rpc.SerializableException;
/**
- * This is the implementation of the repository service to drive the GWT based front end.
- *
+ * This is the implementation of the repository service to drive the GWT based
+ * front end.
+ *
* @author Michael Neale
*/
@Name("org.drools.guvnor.client.rpc.RepositoryService")
@AutoCreate
-public class ServiceImplementation
- implements
- RepositoryService {
+public class ServiceImplementation implements RepositoryService {
- @In
- public RulesRepository repository;
+ @In
+ public RulesRepository repository;
+ private static final long serialVersionUID = 400L;
- private static final long serialVersionUID = 400L;
- private static final DateFormat dateFormatter = DateFormat.getInstance();
- private static final Logger log = LoggingHelper.getLogger();
- private MetaDataMapper metaDataMapper = new MetaDataMapper();
+ private static final DateFormat dateFormatter = DateFormat.getInstance();
- /** Used for a simple cache of binary packages to avoid serialization from the database - for test scenarios.*/
- static Map<String, RuleBase> ruleBaseCache = Collections.synchronizedMap(new HashMap<String, RuleBase>());
+ private static final Logger log = LoggingHelper.getLogger();
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String[] loadChildCategories(String categoryPath) {
+ private MetaDataMapper metaDataMapper = new MetaDataMapper();
- CategoryItem item = repository.loadCategory( categoryPath );
- List children = item.getChildTags();
- String[] list = new String[children.size()];
- for ( int i = 0; i < list.length; i++ ) {
- list[i] = ((CategoryItem) children.get( i )).getName();
- }
- return list;
+ /**
+ * Used for a simple cache of binary packages to avoid serialization from
+ * the database - for test scenarios.
+ */
+ static Map<String, RuleBase> ruleBaseCache = Collections
+ .synchronizedMap(new HashMap<String, RuleBase>());
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String[] loadChildCategories(String categoryPath) {
+ List<String> resultList = new ArrayList<String>();
+ CategoryFilter filter = new CategoryFilter();
+ CategoryItem item = repository.loadCategory(categoryPath);
+ List children = item.getChildTags();
+ for (int i = 0; i < children.size(); i++) {
+ String childCategoryName = ((CategoryItem) children.get(i)).getName();
+ if (filter.accept(childCategoryName, null)) {
+ resultList.add(childCategoryName);
+ }
+ }
+ String[] resultArr = resultList.toArray(new String[resultList.size()]);
+ return resultArr;
+ }
@WebRemote
- @Restrict("#{s:hasRole('admin')}")
- public Boolean createCategory(String path,
- String name,
- String description) {
- log.info( "USER:" + repository.getSession().getUserID()
- + " CREATING cateogory: [" + name + "] in path [" + path + "]" );
+ @Restrict("#{s:hasRole('admin')}")
+ public Boolean createCategory(String path, String name, String description) {
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CREATING cateogory: [" + name + "] in path [" + path + "]");
- if (path == null || "".equals(path)) {
- path = "/";
- }
+ if (path == null || "".equals(path)) {
+ path = "/";
+ }
- CategoryItem item = repository.loadCategory( path );
- item.addCategory( name, description );
- repository.save();
- return Boolean.TRUE;
- }
+ CategoryItem item = repository.loadCategory(path);
+ item.addCategory(name, description);
+ repository.save();
+ return Boolean.TRUE;
+ }
-
- /**
- * This will create a new asset. It will be saved, but not checked in.
- * The initial state will be the draft state.
- */
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String createNewRule(String ruleName,
- String description,
- String initialCategory,
- String initialPackage,
- String format) throws SerializableException {
+ /**
+ * This will create a new asset. It will be saved, but not checked in. The
+ * initial state will be the draft state.
+ */
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String createNewRule(String ruleName, String description,
+ String initialCategory, String initialPackage, String format)
+ throws SerializableException {
if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_ADMIN,
- initialPackage);
+ Identity.instance().checkPermission(
+ new PackageNameType(initialPackage),
+ RoleTypes.PACKAGE_ADMIN);
}
- log.info( "USER:" + repository.getSession().getUserID() +
- " CREATING new asset name [" + ruleName + "] in package [" + initialPackage + "]" );
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CREATING new asset name [" + ruleName + "] in package ["
+ + initialPackage + "]");
- try {
+ try {
- PackageItem pkg = repository.loadPackage( initialPackage );
- AssetItem asset = pkg.addAsset( ruleName, description, initialCategory, format );
+ PackageItem pkg = repository.loadPackage(initialPackage);
+ AssetItem asset = pkg.addAsset(ruleName, description,
+ initialCategory, format);
- applyPreBuiltTemplates( ruleName,
- format,
- asset );
- repository.save();
+ applyPreBuiltTemplates(ruleName, format, asset);
+ repository.save();
+ return asset.getUUID();
+ } catch (RulesRepositoryException e) {
+ if (e.getCause() instanceof ItemExistsException) {
+ return "DUPLICATE";
+ } else {
+ throw new SerializableException(e.getMessage());
+ }
+ }
- return asset.getUUID();
- } catch (RulesRepositoryException e) {
- if (e.getCause() instanceof ItemExistsException) {
- return "DUPLICATE";
- } else {
- throw new SerializableException(e.getMessage());
- }
- }
+ }
- }
-
-
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void deleteUncheckedRule(String uuid, String initialPackage) {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_ADMIN,
- initialPackage);
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void deleteUncheckedRule(String uuid, String initialPackage) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(initialPackage),
+ RoleTypes.PACKAGE_ADMIN);
}
- AssetItem asset = repository.loadAssetByUUID( uuid );
- asset.remove();
- repository.save();
- }
+ AssetItem asset = repository.loadAssetByUUID(uuid);
+ asset.remove();
+ repository.save();
+ }
- /**
- * For some format types, we add some sugar by adding a new template.
- */
- private void applyPreBuiltTemplates(String ruleName,
- String format,
- AssetItem asset) {
- if (format.equals( AssetFormats.DSL_TEMPLATE_RULE )) {
- asset.updateContent( "when\n\nthen\n" );
- } else if (format.equals( AssetFormats.FUNCTION )) {
- asset.updateContent( "function <returnType> " + ruleName + "(<args here>) {\n\n\n}" );
- } else if (format.equals( AssetFormats.DSL )) {
- asset.updateContent( "[when]Condition sentence template {var}=" +
- "rule language mapping {var}\n" +
- "[then]Action sentence template=rule language mapping");
- } else if (format.equals( AssetFormats.DECISION_SPREADSHEET_XLS )) {
- asset.updateBinaryContentAttachment( this.getClass().getResourceAsStream( "/SampleDecisionTable.xls" ) );
- asset.updateBinaryContentAttachmentFileName( "SampleDecisionTable.xls" );
- } else if (format.equals( AssetFormats.DRL )) {
- asset.updateContent( "when\n\t#conditions\nthen\n\t#actions");
- } else if (format.equals( AssetFormats.ENUMERATION )) {
+ /**
+ * For some format types, we add some sugar by adding a new template.
+ */
+ private void applyPreBuiltTemplates(String ruleName, String format,
+ AssetItem asset) {
+ if (format.equals(AssetFormats.DSL_TEMPLATE_RULE)) {
+ asset.updateContent("when\n\nthen\n");
+ } else if (format.equals(AssetFormats.FUNCTION)) {
+ asset.updateContent("function <returnType> " + ruleName
+ + "(<args here>) {\n\n\n}");
+ } else if (format.equals(AssetFormats.DSL)) {
+ asset.updateContent("[when]Condition sentence template {var}="
+ + "rule language mapping {var}\n"
+ + "[then]Action sentence template=rule language mapping");
+ } else if (format.equals(AssetFormats.DECISION_SPREADSHEET_XLS)) {
+ asset.updateBinaryContentAttachment(this.getClass()
+ .getResourceAsStream("/SampleDecisionTable.xls"));
+ asset
+ .updateBinaryContentAttachmentFileName("SampleDecisionTable.xls");
+ } else if (format.equals(AssetFormats.DRL)) {
+ asset.updateContent("when\n\t#conditions\nthen\n\t#actions");
+ } else if (format.equals(AssetFormats.ENUMERATION)) {
- }
- }
+ }
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public PackageConfigData[] listPackages() {
- RepositoryFilter pf = new PackageFilter();
- return listPackages(false, pf);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public PackageConfigData[] listPackages() {
+ RepositoryFilter pf = new PackageFilter();
+ return listPackages(false, pf);
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public PackageConfigData[] listArchivedPackages() {
- RepositoryFilter pf = new PackageFilter();
- return listPackages(true, pf);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public PackageConfigData[] listArchivedPackages() {
+ RepositoryFilter pf = new PackageFilter();
+ return listPackages(true, pf);
+ }
- private PackageConfigData[] listPackages(boolean archive, RepositoryFilter filter) {
+ private PackageConfigData[] listPackages(boolean archive,
+ RepositoryFilter filter) {
List<PackageConfigData> result = new ArrayList<PackageConfigData>();
PackageIterator pkgs = repository.listPackages();
pkgs.setArchivedIterator(archive);
- while(pkgs.hasNext()) {
- PackageItem pkg = (PackageItem) pkgs.next();
+ while (pkgs.hasNext()) {
+ PackageItem pkg = (PackageItem) pkgs.next();
- PackageConfigData data = new PackageConfigData();
- data.uuid = pkg.getUUID();
- data.name = pkg.getName();
- data.archived = pkg.isArchived();
- if (!archive && (filter == null || filter.accept(data, RoleTypes.PACKAGE_READONLY))) {
- result.add(data);
- } else if (archive && data.archived && (filter == null || filter.accept(data, RoleTypes.PACKAGE_READONLY))) {
- result.add(data);
- }
- }
+ PackageConfigData data = new PackageConfigData();
+ data.uuid = pkg.getUUID();
+ data.name = pkg.getName();
+ data.archived = pkg.isArchived();
+ if (!archive
+ && (filter == null || filter.accept(data,
+ RoleTypes.PACKAGE_READONLY))) {
+ result.add(data);
+ } else if (archive
+ && data.archived
+ && (filter == null || filter.accept(data,
+ RoleTypes.PACKAGE_READONLY))) {
+ result.add(data);
+ }
+ }
- sortPackages(result);
- PackageConfigData[] resultArr = result.toArray( new PackageConfigData[result.size()] );
+ sortPackages(result);
+ PackageConfigData[] resultArr = result
+ .toArray(new PackageConfigData[result.size()]);
return resultArr;
}
void sortPackages(List<PackageConfigData> result) {
- Collections.sort( result, new Comparator<Object>() {
+ Collections.sort(result, new Comparator<Object>() {
- public int compare(final Object o1,
- final Object o2) {
- final PackageConfigData d1 = (PackageConfigData) o1;
- final PackageConfigData d2 = (PackageConfigData) o2;
- return d1.name.compareTo( d2.name );
- }
+ public int compare(final Object o1, final Object o2) {
+ final PackageConfigData d1 = (PackageConfigData) o1;
+ final PackageConfigData d2 = (PackageConfigData) o2;
+ return d1.name.compareTo(d2.name);
+ }
- });
+ });
}
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult loadRuleListForCategories(String categoryPath,
+ int skip, int numRows, String tableConfig)
+ throws SerializableException {
+ // love you
+ // long time = System.currentTimeMillis();
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult loadRuleListForCategories(String categoryPath, int skip, int numRows, String tableConfig) throws SerializableException {
- //love you
- //long time = System.currentTimeMillis();
- RepositoryFilter filter = new AssetItemFilter();
- AssetPageList list = repository.findAssetsByCategory( categoryPath, false, skip, numRows, filter);
- TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
- //log.debug("time for load: " + (System.currentTimeMillis() - time) );
- return handler.loadRuleListTable( list );
+ // First check the user has permission to access this categoryPath. This
+ // check only applies to
+ // ANALYST role, always return true for
+ // admin|package.admin|package.dev|package.readonly roles.
+ // We will then use AssetItemFilter to enforce package-based
+ // permissions.
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new CategoryPathType(categoryPath), null);
+ }
- }
+ RepositoryFilter filter = new AssetItemFilter();
+ AssetPageList list = repository.findAssetsByCategory(categoryPath,
+ false, skip, numRows, filter);
+ TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
+ // log.debug("time for load: " + (System.currentTimeMillis() - time) );
+ return handler.loadRuleListTable(list);
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult loadRuleListForState(String stateName, int skip, int numRows, String tableConfig) throws SerializableException {
- //love you
- //long time = System.currentTimeMillis();
+ }
- RepositoryFilter filter = new AssetItemFilter();
- AssetPageList list = repository.findAssetsByState( stateName, false, skip, numRows, filter);
- TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
- //log.debug("time for load: " + (System.currentTimeMillis() - time) );
- return handler.loadRuleListTable( list );
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult loadRuleListForState(String stateName, int skip,
+ int numRows, String tableConfig) throws SerializableException {
+ // love you
+ // long time = System.currentTimeMillis();
- }
+ RepositoryFilter filter = new AssetItemFilter();
+ AssetPageList list = repository.findAssetsByState(stateName, false,
+ skip, numRows, filter);
+ TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
+ // log.debug("time for load: " + (System.currentTimeMillis() - time) );
+ return handler.loadRuleListTable(list);
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableConfig loadTableConfig(String listName) {
- TableDisplayHandler handler = new TableDisplayHandler(listName);
- return handler.loadTableConfig();
- }
+ }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableConfig loadTableConfig(String listName) {
+ TableDisplayHandler handler = new TableDisplayHandler(listName);
+ return handler.loadTableConfig();
+ }
- /**
- * This actually does the hard work of loading up an asset based
- * on its format.
- */
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public RuleAsset loadRuleAsset(String uuid) throws SerializableException {
- AssetItem item = repository.loadAssetByUUID( uuid );
- RuleAsset asset = new RuleAsset();
+ /**
+ * This actually does the hard work of loading up an asset based on its
+ * format.
+ */
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public RuleAsset loadRuleAsset(String uuid) throws SerializableException {
+ AssetItem item = repository.loadAssetByUUID(uuid);
+ RuleAsset asset = new RuleAsset();
- asset.uuid = uuid;
+ asset.uuid = uuid;
- //load standard meta data
- asset.metaData = populateMetaData( item );
+ // load standard meta data
+ asset.metaData = populateMetaData(item);
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_READONLY,
- asset.metaData.packageName);
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(asset.metaData.packageName),
+ RoleTypes.PACKAGE_READONLY);
}
- // get package header
- PackageItem pkgItem = repository.loadPackage( asset.metaData.packageName );
+ // get package header
+ PackageItem pkgItem = repository
+ .loadPackage(asset.metaData.packageName);
- //load the content
- ContentHandler handler = ContentManager.getHandler( asset.metaData.format );
- handler.retrieveAssetContent(asset, pkgItem, item);
+ // load the content
+ ContentHandler handler = ContentManager
+ .getHandler(asset.metaData.format);
+ handler.retrieveAssetContent(asset, pkgItem, item);
- return asset;
+ return asset;
- }
+ }
private RuleAsset loadAsset(AssetItem item) throws SerializableException {
RuleAsset asset = new RuleAsset();
- asset.uuid = item.getUUID();
- //load standard meta data
- asset.metaData = populateMetaData( item );
- // get package header
- PackageItem pkgItem = repository.loadPackage( asset.metaData.packageName );
- //load the content
- ContentHandler handler = ContentManager.getHandler( asset.metaData.format );
- handler.retrieveAssetContent(asset, pkgItem, item);
+ asset.uuid = item.getUUID();
+ // load standard meta data
+ asset.metaData = populateMetaData(item);
+ // get package header
+ PackageItem pkgItem = repository
+ .loadPackage(asset.metaData.packageName);
+ // load the content
+ ContentHandler handler = ContentManager
+ .getHandler(asset.metaData.format);
+ handler.retrieveAssetContent(asset, pkgItem, item);
return asset;
}
+ /**
+ * read in the meta data, populating all dublin core and versioning stuff.
+ */
+ MetaData populateMetaData(VersionableItem item) {
+ MetaData meta = new MetaData();
- /**
- * read in the meta data, populating all dublin core and versioning stuff.
- */
- MetaData populateMetaData(VersionableItem item) {
- MetaData meta = new MetaData();
+ meta.status = (item.getState() != null) ? item.getState().getName()
+ : "";
- meta.status = (item.getState() != null) ? item.getState().getName() : "";
+ metaDataMapper.copyToMetaData(meta, item);
- metaDataMapper.copyToMetaData( meta, item );
+ meta.createdDate = calendarToDate(item.getCreatedDate());
+ meta.lastModifiedDate = calendarToDate(item.getLastModified());
- meta.createdDate = calendarToDate(item.getCreatedDate());
- meta.lastModifiedDate = calendarToDate( item.getLastModified() );
+ return meta;
+ }
- return meta;
- }
+ /**
+ * Populate meta data with asset specific info.
+ */
+ MetaData populateMetaData(AssetItem item) {
+ MetaData meta = populateMetaData((VersionableItem) item);
+ meta.packageName = item.getPackageName();
- /**
- * Populate meta data with asset specific info.
- */
- MetaData populateMetaData(AssetItem item) {
- MetaData meta = populateMetaData( (VersionableItem ) item);
- meta.packageName = item.getPackageName();
+ List cats = item.getCategories();
+ meta.categories = new String[cats.size()];
+ for (int i = 0; i < meta.categories.length; i++) {
+ CategoryItem cat = (CategoryItem) cats.get(i);
+ meta.categories[i] = cat.getFullPath();
+ }
+ meta.dateEffective = calendarToDate(item.getDateEffective());
+ meta.dateExpired = calendarToDate(item.getDateExpired());
+ return meta;
- List cats = item.getCategories();
- meta.categories = new String[cats.size()];
- for ( int i = 0; i < meta.categories.length; i++ ) {
- CategoryItem cat = (CategoryItem) cats.get(i);
- meta.categories[i] = cat.getFullPath();
- }
- meta.dateEffective = calendarToDate( item.getDateEffective() );
- meta.dateExpired = calendarToDate( item.getDateExpired() );
- return meta;
+ }
- }
+ private Date calendarToDate(Calendar createdDate) {
+ if (createdDate == null)
+ return null;
+ return createdDate.getTime();
+ }
- private Date calendarToDate(Calendar createdDate) {
- if (createdDate == null) return null;
- return createdDate.getTime();
- }
+ private Calendar dateToCalendar(Date date) {
+ if (date == null)
+ return null;
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(date);
+ return cal;
+ }
- private Calendar dateToCalendar(Date date) {
- if (date == null) return null;
- Calendar cal = Calendar.getInstance();
- cal.setTime( date );
- return cal;
- }
-
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String checkinVersion(RuleAsset asset) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER,
- asset.metaData.packageName);
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String checkinVersion(RuleAsset asset) throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(asset.metaData.packageName),
+ RoleTypes.PACKAGE_DEVELOPER);
}
- log.info( "USER:" + repository.getSession().getUserID() +
- " CHECKING IN asset: [" + asset.metaData.name + "] UUID: [" + asset.uuid + "] ARCHIVED [" + asset.archived + "]");
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CHECKING IN asset: [" + asset.metaData.name + "] UUID: ["
+ + asset.uuid + "] ARCHIVED [" + asset.archived + "]");
+ AssetItem repoAsset = repository.loadAssetByUUID(asset.uuid);
+ if (asset.metaData.lastModifiedDate.before(repoAsset.getLastModified()
+ .getTime())) {
+ return "ERR: Unable to save this asset, as it has been recently updated by ["
+ + repoAsset.getLastContributor() + "]";
+ }
- AssetItem repoAsset = repository.loadAssetByUUID( asset.uuid );
- if (asset.metaData.lastModifiedDate.before( repoAsset.getLastModified().getTime()) ) {
- return "ERR: Unable to save this asset, as it has been recently updated by [" + repoAsset.getLastContributor() + "]";
- }
+ repoAsset.archiveItem(asset.archived);
+ MetaData meta = asset.metaData;
+ metaDataMapper.copyFromMetaData(meta, repoAsset);
- repoAsset.archiveItem( asset.archived );
- MetaData meta = asset.metaData;
+ repoAsset.updateDateEffective(dateToCalendar(meta.dateEffective));
+ repoAsset.updateDateExpired(dateToCalendar(meta.dateExpired));
- metaDataMapper.copyFromMetaData( meta, repoAsset );
+ repoAsset.updateCategoryList(meta.categories);
+ ContentHandler handler = ContentManager.getHandler(repoAsset
+ .getFormat());// new AssetContentFormatHandler();
+ handler.storeAssetContent(asset, repoAsset);
- repoAsset.updateDateEffective( dateToCalendar( meta.dateEffective ) );
- repoAsset.updateDateExpired( dateToCalendar( meta.dateExpired ) );
+ if (!(asset.metaData.format.equals(AssetFormats.TEST_SCENARIO))
+ || asset.metaData.format.equals(AssetFormats.ENUMERATION)) {
+ PackageItem pkg = repoAsset.getPackage();
+ pkg.updateBinaryUpToDate(false);
+ this.ruleBaseCache.remove(pkg.getUUID());
+ }
- repoAsset.updateCategoryList( meta.categories );
- ContentHandler handler = ContentManager.getHandler( repoAsset.getFormat() );//new AssetContentFormatHandler();
- handler.storeAssetContent( asset, repoAsset );
+ repoAsset.checkin(meta.checkinComment);
- if (!(asset.metaData.format.equals(AssetFormats.TEST_SCENARIO))
- ||
- asset.metaData.format.equals(AssetFormats.ENUMERATION)) {
- PackageItem pkg = repoAsset.getPackage();
- pkg.updateBinaryUpToDate(false);
- this.ruleBaseCache.remove(pkg.getUUID());
+ return repoAsset.getUUID();
+ }
- }
-
- repoAsset.checkin( meta.checkinComment );
-
- return repoAsset.getUUID();
- }
-
-
-
-
-
@WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult loadAssetHistory(String uuid) throws SerializableException {
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult loadAssetHistory(String uuid)
+ throws SerializableException {
- List<TableDataRow> result = new ArrayList<TableDataRow>();
+ List<TableDataRow> result = new ArrayList<TableDataRow>();
- AssetItem item = repository.loadAssetByUUID( uuid );
+ AssetItem item = repository.loadAssetByUUID(uuid);
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_READONLY, item.getPackage().getUUID());
- }
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(item.getPackage().getUUID()),
+ RoleTypes.PACKAGE_READONLY);
+ }
+ AssetHistoryIterator it = item.getHistory();
- AssetHistoryIterator it = item.getHistory();
+ // MN Note: this uses the lazy iterator, but then loads the whole lot
+ // up, and returns it.
+ // The reason for this is that the GUI needs to show things in numeric
+ // order by the version number.
+ // When a version is restored, its previous version is NOT what you
+ // thought it was - due to how JCR works
+ // (its more like CVS then SVN). So to get a linear progression of
+ // versions, we use the incrementing version number,
+ // and load it all up and sort it. This is not ideal.
+ // In future, we may do a "restore" instead just by copying content into
+ // a new version, not restoring a node,
+ // in which case the iterator will be in order (or you can just walk all
+ // the way back).
+ // So if there are performance problems with looking at lots of
+ // historical versions, look at this nasty bit of code.
+ while (it.hasNext()) {
+ AssetItem historical = (AssetItem) it.next();// new
+ // AssetItem(repo,
+ // element);
+ long versionNumber = historical.getVersionNumber();
+ if (!(versionNumber == 0)
+ && !(versionNumber == item.getVersionNumber())) {
+ TableDataRow row = new TableDataRow();
+ row.id = historical.getVersionSnapshotUUID();
+ row.values = new String[4];
+ row.values[0] = Long.toString(historical.getVersionNumber());
+ row.values[1] = historical.getCheckinComment();
+ row.values[2] = dateFormatter.format(historical
+ .getLastModified().getTime());
+ row.values[3] = historical.getStateDescription();
+ result.add(row);
+ }
+ }
+ if (result.size() == 0)
+ return null;
+ TableDataResult table = new TableDataResult();
+ table.data = result.toArray(new TableDataRow[result.size()]);
- //MN Note: this uses the lazy iterator, but then loads the whole lot up, and returns it.
- //The reason for this is that the GUI needs to show things in numeric order by the version number.
- //When a version is restored, its previous version is NOT what you thought it was - due to how JCR works
- // (its more like CVS then SVN). So to get a linear progression of versions, we use the incrementing version number,
- // and load it all up and sort it. This is not ideal.
- // In future, we may do a "restore" instead just by copying content into a new version, not restoring a node,
- // in which case the iterator will be in order (or you can just walk all the way back).
- //So if there are performance problems with looking at lots of historical versions, look at this nasty bit of code.
- while ( it.hasNext() ) {
- AssetItem historical = (AssetItem) it.next();//new AssetItem(repo, element);
- long versionNumber = historical.getVersionNumber();
- if (! (versionNumber == 0)
- && ! (versionNumber == item.getVersionNumber() ))
- {
- TableDataRow row = new TableDataRow();
- row.id = historical.getVersionSnapshotUUID();
- row.values = new String[4];
- row.values[0] = Long.toString( historical.getVersionNumber());
- row.values[1] = historical.getCheckinComment();
- row.values[2] = dateFormatter.format( historical.getLastModified().getTime() );
- row.values[3] = historical.getStateDescription();
- result.add( row );
- }
- }
+ return table;
+ }
- if (result.size() == 0) return null;
- TableDataResult table = new TableDataResult();
- table.data = result.toArray(new TableDataRow[result.size()]);
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult loadArchivedAssets(int skip, int numRows)
+ throws SerializableException {
+ List<TableDataRow> result = new ArrayList<TableDataRow>();
+ RepositoryFilter filter = new AssetItemFilter();
- return table;
- }
+ AssetItemIterator it = repository.findArchivedAssets();
+ it.skip(skip);
+ int count = 0;
+ while (it.hasNext()) {
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult loadArchivedAssets(int skip, int numRows) throws SerializableException {
- List<TableDataRow> result = new ArrayList<TableDataRow>();
- RepositoryFilter filter = new AssetItemFilter();
+ AssetItem archived = (AssetItem) it.next();
- AssetItemIterator it = repository.findArchivedAssets();
- it.skip(skip);
- int count = 0;
- while ( it.hasNext() ) {
-
- AssetItem archived = (AssetItem) it.next();
-
- if (filter.accept(archived, "read")) {
+ if (filter.accept(archived, "read")) {
TableDataRow row = new TableDataRow();
row.id = archived.getUUID();
row.values = new String[5];
@@ -566,384 +611,406 @@
if (count == numRows) {
break;
}
- }
+ }
+ TableDataResult table = new TableDataResult();
+ table.data = result.toArray(new TableDataRow[result.size()]);
+ return table;
+ }
- TableDataResult table = new TableDataResult();
- table.data = result.toArray(new TableDataRow[result.size()]);
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void restoreVersion(String versionUUID, String assetUUID,
+ String comment) {
+ AssetItem old = repository.loadAssetByUUID(versionUUID);
+ AssetItem head = repository.loadAssetByUUID(assetUUID);
- return table;
- }
+ log.info("USER:" + repository.getSession().getUserID()
+ + " RESTORE of asset: [" + head.getName() + "] UUID: ["
+ + head.getUUID() + "] with historical version number: ["
+ + old.getVersionNumber());
+ repository.restoreHistoricalAsset(old, head, comment);
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void restoreVersion(String versionUUID,
- String assetUUID,
- String comment) {
- AssetItem old = repository.loadAssetByUUID( versionUUID );
- AssetItem head = repository.loadAssetByUUID( assetUUID );
+ @WebRemote
+ @Restrict("#{s:hasRole('admin')}")
+ public byte[] exportRepository() throws SerializableException {
- log.info( "USER:" + repository.getSession().getUserID() +
- " RESTORE of asset: [" + head.getName() + "] UUID: [" + head.getUUID() + "] with historical version number: [" + old.getVersionNumber() );
+ log.info("USER:" + repository.getSession().getUserID()
+ + " EXPORTING repository");
+ byte[] exportedOutput = null;
+ try {
+ exportedOutput = repository.exportRulesRepository();
+ } catch (Exception e) {
+ throw new SerializableException("Unable to export repository");
+ }
+ return exportedOutput;
+ }
- repository.restoreHistoricalAsset( old,
- head,
- comment );
+ @WebRemote
+ @Restrict("#{s:hasRole('admin')}")
+ public String createPackage(String name, String description)
+ throws SerializableException {
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CREATING package [" + name + "]");
+ PackageItem item = repository.createPackage(name, description);
- }
+ return item.getUUID();
+ }
- @WebRemote
- @Restrict("#{s:hasRole('admin')}")
- public byte[] exportRepository() throws SerializableException {
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public PackageConfigData loadPackageConfig(String uuid) {
+ PackageItem item = repository.loadPackageByUUID(uuid);
+ // the uuid passed in is the uuid of that deployment bundle, not the
+ // package uudi.
+ // we have to figure out the package name.
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(item.getName()),
+ RoleTypes.PACKAGE_READONLY);
+ }
- log.info( "USER:" + repository.getSession().getUserID() +
- " EXPORTING repository");
+ PackageConfigData data = new PackageConfigData();
+ data.uuid = item.getUUID();
+ data.header = getDroolsHeader(item);
+ data.externalURI = item.getExternalURI();
+ data.description = item.getDescription();
+ data.name = item.getName();
+ data.lastModified = item.getLastModified().getTime();
+ data.dateCreated = item.getCreatedDate().getTime();
+ data.checkinComment = item.getCheckinComment();
+ data.lasContributor = item.getLastContributor();
+ data.state = item.getStateDescription();
+ data.isSnapshot = item.isSnapshot();
+ if (data.isSnapshot) {
+ data.snapshotName = item.getSnapshotName();
+ }
+ return data;
+ }
- byte [] exportedOutput = null;
- try {
- exportedOutput = repository.exportRulesRepository();
- } catch ( Exception e ) {
- throw new SerializableException( "Unable to export repository" );
- }
- return exportedOutput;
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public ValidatedResponse savePackage(PackageConfigData data)
+ throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(new PackageUUIDType(data.uuid),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- @WebRemote
- @Restrict("#{s:hasRole('admin')}")
- public String createPackage(String name,
- String description) throws SerializableException {
- log.info( "USER:" + repository.getSession().getUserID() +
- " CREATING package [" + name + "]" );
- PackageItem item = repository.createPackage( name, description );
+ log.info("USER:" + repository.getSession().getUserID()
+ + " SAVING package [" + data.name + "]");
- return item.getUUID();
- }
+ PackageItem item = repository.loadPackage(data.name);
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public PackageConfigData loadPackageConfig(String uuid) {
- PackageItem item = repository.loadPackageByUUID( uuid );
- //the uuid passed in is the uuid of that deployment bundle, not the package uudi.
- //we have to figure out the package name.
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_READONLY, item.getName());
- }
+ updateDroolsHeader(data.header, item);
+ item.updateExternalURI(data.externalURI);
+ item.updateDescription(data.description);
+ item.archiveItem(data.archived);
+ item.updateBinaryUpToDate(false);
+ this.ruleBaseCache.remove(data.uuid);
+ item.checkin(data.description);
- PackageConfigData data = new PackageConfigData();
- data.uuid = item.getUUID();
- data.header = getDroolsHeader(item);
- data.externalURI = item.getExternalURI();
- data.description = item.getDescription();
- data.name = item.getName();
- data.lastModified = item.getLastModified().getTime();
- data.dateCreated = item.getCreatedDate().getTime();
- data.checkinComment = item.getCheckinComment();
- data.lasContributor = item.getLastContributor();
- data.state = item.getStateDescription();
- data.isSnapshot = item.isSnapshot();
- if (data.isSnapshot) {
- data.snapshotName = item.getSnapshotName();
- }
- return data;
- }
+ BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
+ loader.getSuggestionEngine(item);
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public ValidatedResponse savePackage(PackageConfigData data) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, data.uuid);
- }
+ ValidatedResponse res = new ValidatedResponse();
+ if (loader.hasErrors()) {
+ res.hasErrors = true;
+ String err = "";
+ for (Iterator iter = loader.getErrors().iterator(); iter.hasNext();) {
+ err += (String) iter.next();
+ if (iter.hasNext())
+ err += "\n";
+ }
+ res.errorHeader = "Package validation errors";
+ res.errorMessage = err;
+ }
- log.info( "USER:" + repository.getSession().getUserID() +
- " SAVING package [" + data.name + "]" );
+ return res;
+ }
- PackageItem item = repository.loadPackage( data.name );
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult listAssets(String uuid, String formats[], int skip,
+ int numRows, String tableConfig) throws SerializableException {
+ // TODO: This does not work for package snapshot. package snspshot's
+ // UUID is different
+ // from its corresponding package. However we seem to expect to get same
+ // assets using the
+ // package snapshot UUID here
+ // Identity.instance().checkPermission("ignoredanyway", "read", uuid);
- updateDroolsHeader( data.header, item );
- item.updateExternalURI( data.externalURI );
- item.updateDescription( data.description );
- item.archiveItem( data.archived );
- item.updateBinaryUpToDate(false);
- this.ruleBaseCache.remove(data.uuid);
- item.checkin( data.description );
+ if (numRows == 0) {
+ throw new DetailedSerializableException(
+ "Unable to return zero results (bug)",
+ "probably have the parameters around the wrong way, sigh...");
+ }
+ long start = System.currentTimeMillis();
+ PackageItem pkg = repository.loadPackageByUUID(uuid);
+ AssetItemIterator it = pkg.listAssetsByFormat(formats);
+ TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
+ log.debug("time for asset list load: "
+ + (System.currentTimeMillis() - start));
+ return handler.loadRuleListTable(it, skip, numRows);
+ }
- BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
- loader.getSuggestionEngine( item );
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult queryFullText(String text, boolean seekArchived,
+ int skip, int numRows) throws SerializableException {
+ if (numRows == 0) {
+ throw new DetailedSerializableException(
+ "Unable to return zero results (bug)",
+ "probably have the parameters around the wrong way, sigh...");
+ }
+ AssetItemIterator it = repository.queryFullText(text, seekArchived);
+ TableDisplayHandler handler = new TableDisplayHandler("searchresults");
+ return handler.loadRuleListTable(it, skip, numRows);
+ }
- ValidatedResponse res = new ValidatedResponse();
- if (loader.hasErrors()) {
- res.hasErrors = true;
- String err = "";
- for ( Iterator iter = loader.getErrors().iterator(); iter.hasNext(); ) {
- err += (String) iter.next();
- if (iter.hasNext()) err += "\n";
- }
- res.errorHeader = "Package validation errors";
- res.errorMessage = err;
- }
-
-
- return res;
- }
-
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult listAssets(String uuid,
- String formats[],
- int skip,
- int numRows,
- String tableConfig) throws SerializableException {
- //TODO: This does not work for package snapshot. package snspshot's UUID is different
- //from its corresponding package. However we seem to expect to get same assets using the
- //package snapshot UUID here
- //Identity.instance().checkPermission("ignoredanyway", "read", uuid);
-
- if (numRows == 0) {
- throw new DetailedSerializableException("Unable to return zero results (bug)", "probably have the parameters around the wrong way, sigh...");
- }
- long start = System.currentTimeMillis();
- PackageItem pkg = repository.loadPackageByUUID( uuid );
- AssetItemIterator it = pkg.listAssetsByFormat( formats );
- TableDisplayHandler handler = new TableDisplayHandler(tableConfig);
- log.debug("time for asset list load: " + (System.currentTimeMillis() - start) );
- return handler.loadRuleListTable( it, skip, numRows );
- }
-
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult queryFullText(String text, boolean seekArchived, int skip, int numRows) throws SerializableException {
- if (numRows == 0) {
- throw new DetailedSerializableException("Unable to return zero results (bug)", "probably have the parameters around the wrong way, sigh...");
- }
- AssetItemIterator it = repository.queryFullText(text, seekArchived);
- TableDisplayHandler handler = new TableDisplayHandler("searchresults");
- return handler.loadRuleListTable(it, skip, numRows);
- }
-
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult queryMetaData(final MetaDataQuery[] qr, Date createdAfter, Date createdBefore, Date modifiedAfter, Date modifiedBefore,
- boolean seekArchived, int skip, int numRows) throws SerializableException {
- if (numRows == 0) {
- throw new DetailedSerializableException("Unable to return zero results (bug)", "probably have the parameters around the wrong way, sigh...");
- }
- Map<String, String[]> q = new HashMap<String, String[]>() {{
- for (int i = 0; i < qr.length; i++) {
- String vals = (qr[i].valueList == null) ? "" : qr[i].valueList.trim();
- if (vals.length() > 0) {
- put(qr[i].attribute, vals.split(",\\s?"));
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult queryMetaData(final MetaDataQuery[] qr,
+ Date createdAfter, Date createdBefore, Date modifiedAfter,
+ Date modifiedBefore, boolean seekArchived, int skip, int numRows)
+ throws SerializableException {
+ if (numRows == 0) {
+ throw new DetailedSerializableException(
+ "Unable to return zero results (bug)",
+ "probably have the parameters around the wrong way, sigh...");
+ }
+ Map<String, String[]> q = new HashMap<String, String[]>() {
+ {
+ for (int i = 0; i < qr.length; i++) {
+ String vals = (qr[i].valueList == null) ? ""
+ : qr[i].valueList.trim();
+ if (vals.length() > 0) {
+ put(qr[i].attribute, vals.split(",\\s?"));
+ }
+ }
}
- }};
+ };
- DateQuery[] dates = new DateQuery[2];
+ DateQuery[] dates = new DateQuery[2];
+ dates[0] = new DateQuery("jcr:created", isoDate(createdAfter),
+ isoDate(createdBefore));
+ dates[1] = new DateQuery(AssetItem.LAST_MODIFIED_PROPERTY_NAME,
+ isoDate(modifiedAfter), isoDate(modifiedBefore));
+ AssetItemIterator it = repository.query(q, seekArchived, dates);
+ TableDisplayHandler handler = new TableDisplayHandler("searchresults");
+ return handler.loadRuleListTable(it, skip, numRows);
+ }
- dates[0] = new DateQuery("jcr:created", isoDate(createdAfter), isoDate(createdBefore));
- dates[1] = new DateQuery(AssetItem.LAST_MODIFIED_PROPERTY_NAME, isoDate(modifiedAfter), isoDate(modifiedBefore));
- AssetItemIterator it = repository.query(q, seekArchived, dates);
- TableDisplayHandler handler = new TableDisplayHandler("searchresults");
- return handler.loadRuleListTable(it, skip, numRows);
- }
-
-
- private String isoDate(Date d) {
- if (d != null) {
- Calendar cal = Calendar.getInstance();
- cal.setTime(d);
- return ISO8601.format(cal);
- }
+ private String isoDate(Date d) {
+ if (d != null) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(d);
+ return ISO8601.format(cal);
+ }
return null;
}
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String createState(String name) throws SerializableException {
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CREATING state: [" + name + "]");
+ try {
+ String uuid = repository.createState(name).getNode().getUUID();
+ repository.save();
+ return uuid;
+ } catch (RepositoryException e) {
+ throw new SerializableException("Unable to create the status.");
+ }
+ }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String[] listStates() throws SerializableException {
+ StateItem[] states = repository.listStates();
+ String[] result = new String[states.length];
+ for (int i = 0; i < states.length; i++) {
+ result[i] = states[i].getName();
+ }
+ return result;
+ }
-
@WebRemote
- @Restrict("#{identity.loggedIn}")
- public String createState(String name) throws SerializableException {
- log.info( "USER:" + repository.getSession().getUserID() +
- " CREATING state: [" + name + "]" );
- try {
- String uuid = repository.createState( name ).getNode().getUUID();
- repository.save();
- return uuid;
- } catch ( RepositoryException e ) {
- throw new SerializableException( "Unable to create the status." );
- }
- }
+ @Restrict("#{identity.loggedIn}")
+ public void changeState(String uuid, String newState, boolean wholePackage) {
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String[] listStates() throws SerializableException {
- StateItem[] states = repository.listStates();
- String[] result = new String[states.length];
- for ( int i = 0; i < states.length; i++ ) {
- result[i] = states[i].getName();
- }
- return result;
- }
+ if (!wholePackage) {
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void changeState(String uuid,
- String newState,
- boolean wholePackage) {
+ AssetItem asset = repository.loadAssetByUUID(uuid);
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CHANGING ASSET STATUS. Asset name, uuid: " + "["
+ + asset.getName() + ", " + asset.getUUID() + "]" + " to ["
+ + newState + "]");
- if (!wholePackage) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(asset.getPackage().getUUID()),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- AssetItem asset = repository.loadAssetByUUID( uuid );
- log.info( "USER:" + repository.getSession().getUserID() +
- " CHANGING ASSET STATUS. Asset name, uuid: " +
- "[" + asset.getName() + ", " +asset.getUUID() + "]"
- + " to [" + newState + "]");
+ asset.updateState(newState);
+ } else {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(new PackageUUIDType(uuid),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", "update", asset.getPackage().getUUID());
- }
+ PackageItem pkg = repository.loadPackageByUUID(uuid);
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CHANGING Package STATUS. Asset name, uuid: " + "["
+ + pkg.getName() + ", " + pkg.getUUID() + "]" + " to ["
+ + newState + "]");
+ pkg.changeStatus(newState);
+ }
+ repository.save();
+ }
- asset.updateState( newState );
- } else {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", "update", uuid);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void changeAssetPackage(String uuid, String newPackage,
+ String comment) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(newPackage),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- PackageItem pkg = repository.loadPackageByUUID( uuid );
- log.info( "USER:" + repository.getSession().getUserID() +
- " CHANGING Package STATUS. Asset name, uuid: " +
- "[" + pkg.getName() + ", " + pkg.getUUID() + "]"
- + " to [" + newState + "]");
- pkg.changeStatus(newState);
- }
- repository.save();
- }
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CHANGING PACKAGE OF asset: [" + uuid + "] to ["
+ + newPackage + "]");
+ repository.moveRuleItemPackage(newPackage, uuid, comment);
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void changeAssetPackage(String uuid,
- String newPackage,
- String comment) {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, newPackage);
- }
+ }
- log.info( "USER:" + repository.getSession().getUserID() +
- " CHANGING PACKAGE OF asset: [" + uuid + "] to [" + newPackage + "]");
- repository.moveRuleItemPackage( newPackage, uuid, comment );
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String copyAsset(String assetUUID, String newPackage, String newName) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(newPackage),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- }
+ return repository.copyAsset(assetUUID, newPackage, newName);
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String copyAsset(String assetUUID,
- String newPackage,
- String newName) {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, newPackage);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public SnapshotInfo[] listSnapshots(String packageName) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(packageName),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- return repository.copyAsset( assetUUID, newPackage, newName );
- }
+ String[] snaps = repository.listPackageSnapshots(packageName);
+ SnapshotInfo[] res = new SnapshotInfo[snaps.length];
+ for (int i = 0; i < snaps.length; i++) {
+ PackageItem snap = repository.loadPackageSnapshot(packageName,
+ snaps[i]);
+ SnapshotInfo info = new SnapshotInfo();
+ res[i] = info;
+ info.comment = snap.getCheckinComment();
+ info.name = snaps[i];
+ info.uuid = snap.getUUID();
+ }
+ return res;
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public SnapshotInfo[] listSnapshots(String packageName) {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, packageName);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void createPackageSnapshot(String packageName, String snapshotName,
+ boolean replaceExisting, String comment) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(packageName), RoleTypes.PACKAGE_ADMIN);
+ }
- String[] snaps = repository.listPackageSnapshots( packageName );
- SnapshotInfo[] res = new SnapshotInfo[snaps.length];
- for ( int i = 0; i < snaps.length; i++ ) {
- PackageItem snap = repository.loadPackageSnapshot( packageName, snaps[i] );
- SnapshotInfo info = new SnapshotInfo();
- res[i] = info;
- info.comment = snap.getCheckinComment();
- info.name = snaps[i];
- info.uuid = snap.getUUID();
- }
- return res;
- }
+ log.info("USER:" + repository.getSession().getUserID()
+ + " CREATING PACKAGE SNAPSHOT for package: [" + packageName
+ + "] snapshot name: [" + snapshotName);
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void createPackageSnapshot(String packageName,
- String snapshotName,
- boolean replaceExisting,
- String comment) {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_ADMIN, packageName);
- }
+ if (replaceExisting) {
+ repository.removePackageSnapshot(packageName, snapshotName);
+ }
- log.info( "USER:" + repository.getSession().getUserID() +
- " CREATING PACKAGE SNAPSHOT for package: [" + packageName + "] snapshot name: [" + snapshotName );
+ repository.createPackageSnapshot(packageName, snapshotName);
+ PackageItem item = repository.loadPackageSnapshot(packageName,
+ snapshotName);
+ item.updateCheckinComment(comment);
+ repository.save();
- if (replaceExisting) {
- repository.removePackageSnapshot( packageName, snapshotName );
- }
+ }
- repository.createPackageSnapshot( packageName, snapshotName );
- PackageItem item = repository.loadPackageSnapshot( packageName, snapshotName );
- item.updateCheckinComment( comment );
- repository.save();
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void copyOrRemoveSnapshot(String packageName, String snapshotName,
+ boolean delete, String newSnapshotName)
+ throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(packageName), RoleTypes.PACKAGE_ADMIN);
+ }
- }
+ if (delete) {
+ log.info("USER:" + repository.getSession().getUserID()
+ + " REMOVING SNAPSHOT for package: [" + packageName
+ + "] snapshot: [" + snapshotName + "]");
+ repository.removePackageSnapshot(packageName, snapshotName);
+ } else {
+ if (newSnapshotName.equals("")) {
+ throw new SerializableException(
+ "Need to have a new snapshot name.");
+ }
+ log.info("USER:" + repository.getSession().getUserID()
+ + " COPYING SNAPSHOT for package: [" + packageName
+ + "] snapshot: [" + snapshotName + "] to ["
+ + newSnapshotName + "]");
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void copyOrRemoveSnapshot(String packageName,
- String snapshotName,
- boolean delete,
- String newSnapshotName) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_ADMIN, packageName);
- }
+ repository.copyPackageSnapshot(packageName, snapshotName,
+ newSnapshotName);
+ }
- if (delete) {
- log.info( "USER:" + repository.getSession().getUserID() +
- " REMOVING SNAPSHOT for package: [" + packageName + "] snapshot: [" + snapshotName + "]" );
- repository.removePackageSnapshot( packageName, snapshotName );
- } else {
- if (newSnapshotName.equals( "" )) {
- throw new SerializableException("Need to have a new snapshot name.");
- }
- log.info( "USER:" + repository.getSession().getUserID() +
- " COPYING SNAPSHOT for package: [" + packageName + "] snapshot: [" + snapshotName + "] to [" + newSnapshotName + "]" );
+ }
- repository.copyPackageSnapshot( packageName, snapshotName, newSnapshotName );
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public TableDataResult quickFindAsset(String searchText, int max,
+ boolean searchArchived) {
- }
+ String search = Pattern.compile("*", Pattern.LITERAL).matcher(
+ searchText).replaceAll(Matcher.quoteReplacement("%"));
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public TableDataResult quickFindAsset(String searchText, int max, boolean searchArchived) {
+ if (!search.endsWith("%")) {
+ search += "%";
+ }
- String search = Pattern.compile("*", Pattern.LITERAL).matcher(searchText).replaceAll(Matcher.quoteReplacement("%"));
+ TableDataResult result = new TableDataResult();
- if (!search.endsWith( "%" )) {
- search += "%";
- }
+ List<TableDataRow> resultList = new ArrayList<TableDataRow>();
+ long start = System.currentTimeMillis();
+ AssetItemIterator it = repository.findAssetsByName(search,
+ searchArchived); // search for archived items
+ log.debug("Search time: " + (System.currentTimeMillis() - start));
- TableDataResult result = new TableDataResult();
-
- List<TableDataRow> resultList = new ArrayList<TableDataRow>();
-
- long start = System.currentTimeMillis();
- AssetItemIterator it = repository.findAssetsByName( search, searchArchived ); // search for archived items
- log.debug("Search time: " + (System.currentTimeMillis() - start));
-
- RepositoryFilter filter = new AssetItemFilter();
- for(int i = 0; i < max; i++) {
- if (!it.hasNext()) {
- break;
- }
- AssetItem item = (AssetItem) it.next();
+ RepositoryFilter filter = new AssetItemFilter();
+ for (int i = 0; i < max; i++) {
+ if (!it.hasNext()) {
+ break;
+ }
+ AssetItem item = (AssetItem) it.next();
if (filter.accept(item, RoleTypes.PACKAGE_READONLY)) {
TableDataRow row = new TableDataRow();
row.id = item.getUUID();
@@ -953,103 +1020,118 @@
resultList.add(row);
}
- }
+ }
- while (it.hasNext()) {
- if (filter.accept((AssetItem) it.next(), RoleTypes.PACKAGE_READONLY)) {
+ while (it.hasNext()) {
+ if (filter
+ .accept((AssetItem) it.next(), RoleTypes.PACKAGE_READONLY)) {
TableDataRow empty = new TableDataRow();
empty.id = "MORE";
resultList.add(empty);
break;
}
- }
+ }
- result.data = resultList.toArray( new TableDataRow[resultList.size()] );
- return result;
+ result.data = resultList.toArray(new TableDataRow[resultList.size()]);
+ return result;
- }
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void removeCategory(String categoryPath) throws SerializableException {
- log.info( "USER:" + repository.getSession().getUserID() +
- " REMOVING CATEGORY path: [" + categoryPath + "]" );
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void removeCategory(String categoryPath)
+ throws SerializableException {
+ log.info("USER:" + repository.getSession().getUserID()
+ + " REMOVING CATEGORY path: [" + categoryPath + "]");
- try {
- repository.loadCategory( categoryPath ).remove();
- repository.save();
- } catch (RulesRepositoryException e) {
- throw new DetailedSerializableException("Unable to remove category. It is probably still used (even by archived items).", e.getMessage());
- }
- }
+ try {
+ repository.loadCategory(categoryPath).remove();
+ repository.save();
+ } catch (RulesRepositoryException e) {
+ throw new DetailedSerializableException(
+ "Unable to remove category. It is probably still used (even by archived items).",
+ e.getMessage());
+ }
+ }
- @WebRemote
- @Restrict("#{s:hasRole('admin')}")
- public void clearRulesRepository() {
- RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(repository.getSession());
- admin.clearRulesRepository();
- }
+ @WebRemote
+ @Restrict("#{s:hasRole('admin')}")
+ public void clearRulesRepository() {
+ RulesRepositoryAdministrator admin = new RulesRepositoryAdministrator(
+ repository.getSession());
+ admin.clearRulesRepository();
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public SuggestionCompletionEngine loadSuggestionCompletionEngine(String packageName) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_READONLY, packageName);
- }
- try {
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public SuggestionCompletionEngine loadSuggestionCompletionEngine(
+ String packageName) throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(packageName),
+ RoleTypes.PACKAGE_READONLY);
+ }
+ try {
- PackageItem pkg = repository.loadPackage( packageName );
- BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
- return loader.getSuggestionEngine( pkg );
- } catch (RulesRepositoryException e) {
- log.error( e );
- throw new SerializableException(e.getMessage());
- }
+ PackageItem pkg = repository.loadPackage(packageName);
+ BRMSSuggestionCompletionLoader loader = new BRMSSuggestionCompletionLoader();
+ return loader.getSuggestionEngine(pkg);
+ } catch (RulesRepositoryException e) {
+ log.error(e);
+ throw new SerializableException(e.getMessage());
+ }
- }
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public BuilderResult[] buildPackage(String packageUUID, String selectorConfigName, boolean force) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, packageUUID);
- }
- PackageItem item = repository.loadPackageByUUID( packageUUID );
- return buildPackage(selectorConfigName, force, item);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public BuilderResult[] buildPackage(String packageUUID,
+ String selectorConfigName, boolean force)
+ throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(packageUUID),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
+ PackageItem item = repository.loadPackageByUUID(packageUUID);
+ return buildPackage(selectorConfigName, force, item);
+ }
private BuilderResult[] buildPackage(String selectorConfigName,
boolean force, PackageItem item)
throws DetailedSerializableException {
if (!force && item.isBinaryUpToDate()) {
- //we can just return all OK if its up to date.
- return null;
- }
- ContentPackageAssembler asm = new ContentPackageAssembler(item, selectorConfigName);
- if (asm.hasErrors()) {
- BuilderResult[] result = generateBuilderResults( asm );
- return result;
- } else {
- try {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- ObjectOutput out = new DroolsObjectOutputStream(bout);
- out.writeObject( asm.getBinaryPackage() );
+ // we can just return all OK if its up to date.
+ return null;
+ }
+ ContentPackageAssembler asm = new ContentPackageAssembler(item,
+ selectorConfigName);
+ if (asm.hasErrors()) {
+ BuilderResult[] result = generateBuilderResults(asm);
+ return result;
+ } else {
+ try {
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ ObjectOutput out = new DroolsObjectOutputStream(bout);
+ out.writeObject(asm.getBinaryPackage());
- item.updateCompiledPackage( new ByteArrayInputStream( bout.toByteArray()) );
- out.flush();
- out.close();
+ item.updateCompiledPackage(new ByteArrayInputStream(bout
+ .toByteArray()));
+ out.flush();
+ out.close();
- updateBinaryPackage(item, asm);
- repository.save();
- } catch (Exception e) {
- log.error( e );
- throw new DetailedSerializableException("An error occurred building the package.", e.getMessage());
- }
+ updateBinaryPackage(item, asm);
+ repository.save();
+ } catch (Exception e) {
+ log.error(e);
+ throw new DetailedSerializableException(
+ "An error occurred building the package.", e
+ .getMessage());
+ }
+ return null;
- return null;
-
- }
+ }
}
private void updateBinaryPackage(PackageItem item,
@@ -1057,249 +1139,275 @@
item.updateBinaryUpToDate(true);
RuleBase rb = RuleBaseFactory.newRuleBase();
rb.addPackage(asm.getBinaryPackage());
- //this.ruleBaseCache.put(item.getUUID(), rb);
+ // this.ruleBaseCache.put(item.getUUID(), rb);
}
-
-
private BuilderResult[] generateBuilderResults(ContentPackageAssembler asm) {
- BuilderResult[] result = new BuilderResult[asm.getErrors().size()];
- for ( int i = 0; i < result.length; i++ ) {
- ContentAssemblyError err = asm.getErrors().get( i );
- BuilderResult res = new BuilderResult();
- res.assetName = err.itemInError.getName();
- res.assetFormat = err.itemInError.getFormat();
- res.message = err.errorReport;
- res.uuid = err.itemInError.getUUID();
- result[i] = res;
- }
- return result;
- }
+ BuilderResult[] result = new BuilderResult[asm.getErrors().size()];
+ for (int i = 0; i < result.length; i++) {
+ ContentAssemblyError err = asm.getErrors().get(i);
+ BuilderResult res = new BuilderResult();
+ res.assetName = err.itemInError.getName();
+ res.assetFormat = err.itemInError.getFormat();
+ res.message = err.errorReport;
+ res.uuid = err.itemInError.getUUID();
+ result[i] = res;
+ }
+ return result;
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String buildPackageSource(String packageUUID) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, packageUUID);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String buildPackageSource(String packageUUID)
+ throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(packageUUID),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- PackageItem item = repository.loadPackageByUUID( packageUUID );
- ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
- return asm.getDRL();
- }
+ PackageItem item = repository.loadPackageByUUID(packageUUID);
+ ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
+ return asm.getDRL();
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String buildAssetSource(RuleAsset asset) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, asset.metaData.packageName);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String buildAssetSource(RuleAsset asset)
+ throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(asset.metaData.packageName),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- AssetItem item = repository.loadAssetByUUID( asset.uuid );
+ AssetItem item = repository.loadAssetByUUID(asset.uuid);
- ContentHandler handler = ContentManager.getHandler( item.getFormat() );//new AssetContentFormatHandler();
- handler.storeAssetContent( asset, item );
- StringBuffer buf = new StringBuffer();
- if (handler.isRuleAsset()) {
+ ContentHandler handler = ContentManager.getHandler(item.getFormat());// new
+ // AssetContentFormatHandler();
+ handler.storeAssetContent(asset, item);
+ StringBuffer buf = new StringBuffer();
+ if (handler.isRuleAsset()) {
- BRMSPackageBuilder builder = new BRMSPackageBuilder(new PackageBuilderConfiguration());
- //now we load up the DSL files
- builder.setDSLFiles( BRMSPackageBuilder.getDSLMappingFiles( item.getPackage(), new BRMSPackageBuilder.DSLErrorEvent() {
- public void recordError(AssetItem asset, String message) {
- //ignore at this point...
- }
- }));
- ((IRuleAsset) handler).assembleDRL( builder, item, buf );
- } else {
- return item.getContent();
- }
+ BRMSPackageBuilder builder = new BRMSPackageBuilder(
+ new PackageBuilderConfiguration());
+ // now we load up the DSL files
+ builder.setDSLFiles(BRMSPackageBuilder.getDSLMappingFiles(item
+ .getPackage(), new BRMSPackageBuilder.DSLErrorEvent() {
+ public void recordError(AssetItem asset, String message) {
+ // ignore at this point...
+ }
+ }));
+ ((IRuleAsset) handler).assembleDRL(builder, item, buf);
+ } else {
+ return item.getContent();
+ }
- return buf.toString();
- }
+ return buf.toString();
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public BuilderResult[] buildAsset(RuleAsset asset) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, asset.metaData.packageName);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public BuilderResult[] buildAsset(RuleAsset asset)
+ throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(asset.metaData.packageName),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- try {
+ try {
- AssetItem item = repository.loadAssetByUUID( asset.uuid );
+ AssetItem item = repository.loadAssetByUUID(asset.uuid);
- ContentHandler handler = ContentManager.getHandler( item.getFormat() );//new AssetContentFormatHandler();
- handler.storeAssetContent( asset, item );
+ ContentHandler handler = ContentManager
+ .getHandler(item.getFormat());// new
+ // AssetContentFormatHandler();
+ handler.storeAssetContent(asset, item);
+ if (handler instanceof IValidating) {
+ return ((IValidating) handler).validateAsset(item);
+ } else {
- if (handler instanceof IValidating) {
- return ((IValidating) handler).validateAsset( item );
- } else {
+ ContentPackageAssembler asm = new ContentPackageAssembler(item);
+ if (!asm.hasErrors()) {
+ return null;
+ } else {
+ return generateBuilderResults(asm);
+ }
+ }
+ } catch (Exception e) {
+ log.error(e);
+ BuilderResult[] result = new BuilderResult[1];
- ContentPackageAssembler asm = new ContentPackageAssembler(item);
- if (!asm.hasErrors()) {
- return null;
- } else {
- return generateBuilderResults( asm );
- }
- }
- } catch (Exception e) {
- log.error(e);
- BuilderResult[] result = new BuilderResult[1];
+ BuilderResult res = new BuilderResult();
+ res.assetName = asset.metaData.name;
+ res.assetFormat = asset.metaData.format;
+ res.message = "Unable to validate this asset. (Check log for detailed messages).";
+ res.uuid = asset.uuid;
+ result[0] = res;
- BuilderResult res = new BuilderResult();
- res.assetName = asset.metaData.name;
- res.assetFormat = asset.metaData.format;
- res.message = "Unable to validate this asset. (Check log for detailed messages).";
- res.uuid = asset.uuid;
- result[0] = res;
+ return result;
+ }
+ }
- return result;
- }
+ @WebRemote
+ @Restrict("#{s:hasRole('admin')}")
+ public void copyPackage(String sourcePackageName, String destPackageName)
+ throws SerializableException {
+ try {
+ repository.copyPackage(sourcePackageName, destPackageName);
+ } catch (RulesRepositoryException e) {
+ log.error(e);
+ throw e;
+ }
- }
+ // If we allow package owner to copy package, we will have to update the
+ // permission store
+ // for the newly copied package.
+ // Update permission store
+ /*
+ * String copiedUuid = ""; try { PackageItem source =
+ * repository.loadPackage( destPackageName ); copiedUuid =
+ * source.getUUID(); } catch (RulesRepositoryException e) { log.error( e ); }
+ * PackageBasedPermissionStore pbps = new PackageBasedPermissionStore();
+ * pbps.addPackageBasedPermission(new PackageBasedPermission(copiedUuid,
+ * Identity.instance().getPrincipal().getName(),
+ * RoleTypes.PACKAGE_ADMIN));
+ */
+ }
- @WebRemote
- @Restrict("#{s:hasRole('admin')}")
- public void copyPackage(String sourcePackageName, String destPackageName) throws SerializableException {
- try {
- repository.copyPackage( sourcePackageName, destPackageName );
- } catch (RulesRepositoryException e) {
- log.error( e );
- throw e;
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String renameAsset(String uuid, String newName) {
+ AssetItem item = repository.loadAssetByUUID(uuid);
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(item.getPackage().getUUID()),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- //If we allow package owner to copy package, we will have to update the permission store
- //for the newly copied package.
- //Update permission store
-/* String copiedUuid = "";
- try {
- PackageItem source = repository.loadPackage( destPackageName );
- copiedUuid = source.getUUID();
- } catch (RulesRepositoryException e) {
- log.error( e );
- }
- PackageBasedPermissionStore pbps = new PackageBasedPermissionStore();
- pbps.addPackageBasedPermission(new PackageBasedPermission(copiedUuid,
- Identity.instance().getPrincipal().getName(),
- RoleTypes.PACKAGE_ADMIN));*/
- }
+ return repository.renameAsset(uuid, newName);
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String renameAsset(String uuid, String newName) {
- AssetItem item = repository.loadAssetByUUID( uuid );
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, item.getPackage().getUUID());
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void archiveAsset(String uuid, boolean value) {
+ try {
+ AssetItem item = repository.loadAssetByUUID(uuid);
- return repository.renameAsset( uuid, newName );
- }
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(item.getPackage().getUUID()),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void archiveAsset(String uuid, boolean value) {
- try {
- AssetItem item = repository.loadAssetByUUID( uuid );
+ item.archiveItem(value);
+ PackageItem pkg = item.getPackage();
+ pkg.updateBinaryUpToDate(false);
+ this.ruleBaseCache.remove(pkg.getUUID());
+ item.checkin("unarchived");
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, item.getPackage().getUUID());
- }
+ } catch (RulesRepositoryException e) {
+ log.error(e);
+ throw e;
+ }
+ }
- item.archiveItem( value );
- PackageItem pkg = item.getPackage();
- pkg.updateBinaryUpToDate(false);
- this.ruleBaseCache.remove(pkg.getUUID());
- item.checkin( "unarchived" );
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void removeAsset(String uuid) {
+ try {
+ AssetItem item = repository.loadAssetByUUID(uuid);
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(item.getPackage().getUUID()),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- } catch (RulesRepositoryException e) {
- log.error( e );
- throw e;
- }
- }
+ item.remove();
+ repository.save();
+ } catch (RulesRepositoryException e) {
+ log.error(e);
+ throw e;
+ }
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void removeAsset(String uuid) {
- try {
- AssetItem item = repository.loadAssetByUUID( uuid );
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, item.getPackage().getUUID());
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public void removePackage(String uuid) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(new PackageUUIDType(uuid),
+ RoleTypes.PACKAGE_ADMIN);
+ }
+ try {
+ PackageItem item = repository.loadPackageByUUID(uuid);
+ item.remove();
+ repository.save();
+ } catch (RulesRepositoryException e) {
+ log.error(e);
+ throw e;
+ }
+ }
- item.remove();
- repository.save();
- } catch (RulesRepositoryException e) {
- log.error( e );
- throw e;
- }
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String renamePackage(String uuid, String newName) {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(new PackageUUIDType(uuid),
+ RoleTypes.PACKAGE_ADMIN);
+ }
+ return repository.renamePackage(uuid, newName);
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public void removePackage(String uuid) {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_ADMIN, uuid);
- }
- try {
- PackageItem item = repository.loadPackageByUUID(uuid);
- item.remove();
- repository.save();
- } catch (RulesRepositoryException e) {
- log.error( e );
- throw e;
- }
- }
+ @WebRemote
+ @Restrict("#{s:hasRole('admin')}")
+ public void rebuildSnapshots() throws SerializableException {
+ Iterator pkit = repository.listPackages();
+ while (pkit.hasNext()) {
+ PackageItem pkg = (PackageItem) pkit.next();
+ String[] snaps = repository.listPackageSnapshots(pkg.getName());
+ for (String snapName : snaps) {
+ PackageItem snap = repository.loadPackageSnapshot(
+ pkg.getName(), snapName);
+ BuilderResult[] res = this.buildPackage(snap.getUUID(), "",
+ true);
+ if (res != null) {
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < res.length; i++) {
+ buf.append(res[i].toString());
+ buf.append('\n');
+ }
+ throw new DetailedSerializableException(
+ "Unable to rebuild snapshot [" + snapName, buf
+ .toString()
+ + "]");
+ }
+ }
+ }
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String renamePackage(String uuid, String newName) {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_ADMIN, uuid);
- }
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
+ public String[] listRulesInPackage(String packageName)
+ throws SerializableException {
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(packageName),
+ RoleTypes.PACKAGE_READONLY);
+ }
- return repository.renamePackage( uuid, newName );
- }
-
- @WebRemote
- @Restrict("#{s:hasRole('admin')}")
- public void rebuildSnapshots() throws SerializableException {
- Iterator pkit = repository.listPackages();
- while(pkit.hasNext()) {
- PackageItem pkg = (PackageItem) pkit.next();
- String[] snaps = repository.listPackageSnapshots( pkg.getName() );
- for ( String snapName : snaps ) {
- PackageItem snap = repository.loadPackageSnapshot( pkg.getName(), snapName );
- BuilderResult[] res = this.buildPackage( snap.getUUID(), "", true ) ;
- if (res != null) {
- StringBuffer buf = new StringBuffer();
- for ( int i = 0; i < res.length; i++ ) {
- buf.append( res[i].toString() );
- buf.append( '\n' );
- }
- throw new DetailedSerializableException("Unable to rebuild snapshot [" + snapName, buf.toString() + "]" );
- }
- }
- }
- }
-
- @WebRemote
- @Restrict("#{identity.loggedIn}")
- public String[] listRulesInPackage(String packageName) throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_READONLY, packageName);
- }
-
- PackageItem item = repository.loadPackage(packageName);
- ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
- List<String> result = new ArrayList<String>();
- DrlParser p = new DrlParser();
- try {
+ PackageItem item = repository.loadPackage(packageName);
+ ContentPackageAssembler asm = new ContentPackageAssembler(item, false);
+ List<String> result = new ArrayList<String>();
+ DrlParser p = new DrlParser();
+ try {
PackageDescr pkg = p.parse(asm.getDRL());
int count = 0;
- for (Iterator iterator = pkg.getRules().iterator(); iterator.hasNext();) {
+ for (Iterator iterator = pkg.getRules().iterator(); iterator
+ .hasNext();) {
RuleDescr r = (RuleDescr) iterator.next();
result.add(r.getName());
count++;
@@ -1313,98 +1421,108 @@
log.error(e);
return new String[0];
}
- }
+ }
- @WebRemote
- @Restrict("#{identity.loggedIn}")
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
public ScenarioRunResult runScenario(String packageName, Scenario scenario)
throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, packageName);
- }
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageNameType(packageName),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
- PackageItem item = this.repository.loadPackage(packageName);
+ PackageItem item = this.repository.loadPackage(packageName);
- //nasty classloader needed to make sure we use the same tree the whole time.
+ // nasty classloader needed to make sure we use the same tree the whole
+ // time.
ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
final RuleBase rb;
try {
- if (item.isBinaryUpToDate() && this.ruleBaseCache.containsKey(item.getUUID())) {
- rb = this.ruleBaseCache.get(item.getUUID());
- AbstractRuleBase arb = (AbstractRuleBase) rb;
- //load up the existing class loader from before
+ if (item.isBinaryUpToDate()
+ && this.ruleBaseCache.containsKey(item.getUUID())) {
+ rb = this.ruleBaseCache.get(item.getUUID());
+ AbstractRuleBase arb = (AbstractRuleBase) rb;
+ // load up the existing class loader from before
- } else {
- //load up the classloader we are going to use
- List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
- ClassLoader buildCl = BRMSPackageBuilder.createClassLoader(jars);
+ } else {
+ // load up the classloader we are going to use
+ List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
+ ClassLoader buildCl = BRMSPackageBuilder
+ .createClassLoader(jars);
- //we have to build the package, and try again.
- if (item.isBinaryUpToDate()) {
- rb = loadRuleBase(item, buildCl);
- this.ruleBaseCache.put(item.getUUID(), rb);
- } else {
- BuilderResult[] errs = this.buildPackage(null, false, item);
- if (errs == null || errs.length == 0) {
- rb = loadRuleBase(item, buildCl);
- this.ruleBaseCache.put(item.getUUID(), rb);
- } else {
- return new ScenarioRunResult(errs, null);
- }
- }
- }
+ // we have to build the package, and try again.
+ if (item.isBinaryUpToDate()) {
+ rb = loadRuleBase(item, buildCl);
+ this.ruleBaseCache.put(item.getUUID(), rb);
+ } else {
+ BuilderResult[] errs = this.buildPackage(null, false, item);
+ if (errs == null || errs.length == 0) {
+ rb = loadRuleBase(item, buildCl);
+ this.ruleBaseCache.put(item.getUUID(), rb);
+ } else {
+ return new ScenarioRunResult(errs, null);
+ }
+ }
+ }
- ClassLoader cl = this.ruleBaseCache.get(item.getUUID()).getPackages()[0].getPackageScopeClassLoader();
- Thread.currentThread().setContextClassLoader(cl);
- return runScenario(scenario, item, cl, rb);
+ ClassLoader cl = this.ruleBaseCache.get(item.getUUID())
+ .getPackages()[0].getPackageScopeClassLoader();
+ Thread.currentThread().setContextClassLoader(cl);
+ return runScenario(scenario, item, cl, rb);
} finally {
Thread.currentThread().setContextClassLoader(originalCL);
}
-
}
- private RuleBase loadRuleBase(PackageItem item, ClassLoader cl) throws DetailedSerializableException {
+ private RuleBase loadRuleBase(PackageItem item, ClassLoader cl)
+ throws DetailedSerializableException {
try {
- RuleBase rb = RuleBaseFactory.newRuleBase(new RuleBaseConfiguration(cl));
- Package bin = (Package) DroolsStreamUtils.streamIn(item.getCompiledPackageBytes(), cl);
+ RuleBase rb = RuleBaseFactory
+ .newRuleBase(new RuleBaseConfiguration(cl));
+ Package bin = (Package) DroolsStreamUtils.streamIn(item
+ .getCompiledPackageBytes(), cl);
rb.addPackage(bin);
return rb;
} catch (ClassNotFoundException e) {
log.error(e);
- throw new DetailedSerializableException("A required class was not found.", e.getMessage());
+ throw new DetailedSerializableException(
+ "A required class was not found.", e.getMessage());
} catch (Exception e) {
log.error(e);
- throw new DetailedSerializableException("Unable to load a rulebase.", e.getMessage());
+ throw new DetailedSerializableException(
+ "Unable to load a rulebase.", e.getMessage());
}
}
- private ScenarioRunResult runScenario(
- Scenario scenario, PackageItem item, ClassLoader cl, RuleBase rb)
- throws DetailedSerializableException {
+ private ScenarioRunResult runScenario(Scenario scenario, PackageItem item,
+ ClassLoader cl, RuleBase rb) throws DetailedSerializableException {
- //RuleBase rb = ruleBaseCache.get(item.getUUID());
+ // RuleBase rb = ruleBaseCache.get(item.getUUID());
Package bin = rb.getPackages()[0];
-
Set<String> imps = bin.getImports().keySet();
Set<String> allImps = new HashSet<String>(imps);
if (bin.getGlobals() != null) {
- for (Iterator iterator = bin.getGlobals().keySet().iterator(); iterator.hasNext();) {
+ for (Iterator iterator = bin.getGlobals().keySet().iterator(); iterator
+ .hasNext();) {
Class c = (Class) bin.getGlobals().get(iterator.next());
allImps.add(c.getName());
}
}
- allImps.add(bin.getName() + ".*"); //need this for Generated beans to work
+ allImps.add(bin.getName() + ".*"); // need this for Generated beans to
+ // work
-
ClassTypeResolver res = new ClassTypeResolver(allImps, cl);
SessionConfiguration sessionConfiguration = new SessionConfiguration();
- sessionConfiguration.setKeepReference( false );
- InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb.newStatefulSession(sessionConfiguration);
+ sessionConfiguration.setKeepReference(false);
+ InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb
+ .newStatefulSession(sessionConfiguration);
return runScenario(scenario, res, workingMemory);
}
@@ -1416,93 +1534,101 @@
return new ScenarioRunResult(null, scenario);
} catch (ClassNotFoundException e) {
log.error(e);
- throw new DetailedSerializableException("Unable to load a required class.", e.getMessage());
+ throw new DetailedSerializableException(
+ "Unable to load a required class.", e.getMessage());
}
}
- @WebRemote
- @Restrict("#{identity.loggedIn}")
+ @WebRemote
+ @Restrict("#{identity.loggedIn}")
public BulkTestRunResult runScenariosInPackage(String packageUUID)
throws SerializableException {
- if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, packageUUID);
- }
+ if (Contexts.isSessionContextActive()) {
+ Identity.instance().checkPermission(
+ new PackageUUIDType(packageUUID),
+ RoleTypes.PACKAGE_DEVELOPER);
+ }
PackageItem item = repository.loadPackageByUUID(packageUUID);
ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
ClassLoader cl = null;
-
try {
- if (item.isBinaryUpToDate() && this.ruleBaseCache.containsKey(item.getUUID())) {
- RuleBase rb = this.ruleBaseCache.get(item.getUUID());
- AbstractRuleBase arb = (AbstractRuleBase) rb;
- //load up the existing class loader from before
- cl = arb.getConfiguration().getClassLoader();
- Thread.currentThread().setContextClassLoader(cl);
- } else {
- //load up the classloader we are going to use
- List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
- cl = BRMSPackageBuilder.createClassLoader(jars);
- Thread.currentThread().setContextClassLoader(cl);
+ if (item.isBinaryUpToDate()
+ && this.ruleBaseCache.containsKey(item.getUUID())) {
+ RuleBase rb = this.ruleBaseCache.get(item.getUUID());
+ AbstractRuleBase arb = (AbstractRuleBase) rb;
+ // load up the existing class loader from before
+ cl = arb.getConfiguration().getClassLoader();
+ Thread.currentThread().setContextClassLoader(cl);
+ } else {
+ // load up the classloader we are going to use
+ List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
+ cl = BRMSPackageBuilder.createClassLoader(jars);
+ Thread.currentThread().setContextClassLoader(cl);
- //we have to build the package, and try again.
- if (item.isBinaryUpToDate()) {
- this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item, cl));
- } else {
- BuilderResult[] errs = this.buildPackage(null, false, item);
- if (errs == null || errs.length == 0) {
- this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item, cl));
- } else {
- return new BulkTestRunResult(errs, null, 0, null);
- }
- }
- }
+ // we have to build the package, and try again.
+ if (item.isBinaryUpToDate()) {
+ this.ruleBaseCache.put(item.getUUID(), loadRuleBase(item,
+ cl));
+ } else {
+ BuilderResult[] errs = this.buildPackage(null, false, item);
+ if (errs == null || errs.length == 0) {
+ this.ruleBaseCache.put(item.getUUID(), loadRuleBase(
+ item, cl));
+ } else {
+ return new BulkTestRunResult(errs, null, 0, null);
+ }
+ }
+ }
-
- AssetItemIterator it = item.listAssetsByFormat(new String[] {AssetFormats.TEST_SCENARIO});
- List<ScenarioResultSummary> resultSummaries = new ArrayList<ScenarioResultSummary>();
+ AssetItemIterator it = item
+ .listAssetsByFormat(new String[] { AssetFormats.TEST_SCENARIO });
+ List<ScenarioResultSummary> resultSummaries = new ArrayList<ScenarioResultSummary>();
RuleBase rb = ruleBaseCache.get(item.getUUID());
Package bin = rb.getPackages()[0];
- ClassTypeResolver res = new ClassTypeResolver(bin.getImports().keySet(), cl);
+ ClassTypeResolver res = new ClassTypeResolver(bin.getImports()
+ .keySet(), cl);
SessionConfiguration sessionConfiguration = new SessionConfiguration();
- sessionConfiguration.setKeepReference( false );
- InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb.newStatefulSession( sessionConfiguration);
+ sessionConfiguration.setKeepReference(false);
+ InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb
+ .newStatefulSession(sessionConfiguration);
- RuleCoverageListener coverage = new RuleCoverageListener(expectedRules(bin));
+ RuleCoverageListener coverage = new RuleCoverageListener(
+ expectedRules(bin));
workingMemory.addEventListener(coverage);
- while(it.hasNext()) {
- RuleAsset asset = loadAsset((AssetItem) it.next());
- Scenario sc = (Scenario) asset.content;
- sc = runScenario(sc, res, workingMemory).scenario;
+ while (it.hasNext()) {
+ RuleAsset asset = loadAsset((AssetItem) it.next());
+ Scenario sc = (Scenario) asset.content;
+ sc = runScenario(sc, res, workingMemory).scenario;
- //clean out WM
- Iterator<FactHandle> fhs = workingMemory.iterateFactHandles();
- while(fhs.hasNext()) {
- workingMemory.retract(fhs.next());
- }
+ // clean out WM
+ Iterator<FactHandle> fhs = workingMemory.iterateFactHandles();
+ while (fhs.hasNext()) {
+ workingMemory.retract(fhs.next());
+ }
- int[] totals = sc.countFailuresTotal();
- resultSummaries.add(new ScenarioResultSummary(totals[0], totals[1], asset.metaData.name, asset.metaData.description, asset.uuid));
- }
+ int[] totals = sc.countFailuresTotal();
+ resultSummaries.add(new ScenarioResultSummary(totals[0],
+ totals[1], asset.metaData.name,
+ asset.metaData.description, asset.uuid));
+ }
- ScenarioResultSummary[] summaries = resultSummaries.toArray(new ScenarioResultSummary[resultSummaries.size()]);
+ ScenarioResultSummary[] summaries = resultSummaries
+ .toArray(new ScenarioResultSummary[resultSummaries.size()]);
- BulkTestRunResult result = new BulkTestRunResult(null,
- resultSummaries.toArray(summaries),
- coverage.getPercentCovered(),
- coverage.getUnfiredRules());
- return result;
+ BulkTestRunResult result = new BulkTestRunResult(null,
+ resultSummaries.toArray(summaries), coverage
+ .getPercentCovered(), coverage.getUnfiredRules());
+ return result;
-
} finally {
Thread.currentThread().setContextClassLoader(originalCL);
}
-
}
private HashSet<String> expectedRules(Package bin) {
@@ -1514,11 +1640,13 @@
}
@WebRemote
- @Restrict("#{identity.loggedIn}")
+ @Restrict("#{identity.loggedIn}")
public AnalysisReport analysePackage(String packageUUID)
throws SerializableException {
if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", RoleTypes.PACKAGE_DEVELOPER, packageUUID);
+ Identity.instance().checkPermission(
+ new PackageUUIDType(packageUUID),
+ RoleTypes.PACKAGE_DEVELOPER);
}
String drl = this.buildPackageSource(packageUUID);
@@ -1527,43 +1655,53 @@
return runner.analyse(drl);
} catch (DroolsParserException e) {
log.error(e);
- throw new DetailedSerializableException("Unable to parse the rules.", e.getMessage());
+ throw new DetailedSerializableException(
+ "Unable to parse the rules.", e.getMessage());
}
}
@WebRemote
- @Restrict("#{identity.loggedIn}")
- public String[] listTypesInPackage(String packageUUID) throws SerializableException {
+ @Restrict("#{identity.loggedIn}")
+ public String[] listTypesInPackage(String packageUUID)
+ throws SerializableException {
if (Contexts.isSessionContextActive()) {
- Identity.instance().checkPermission("ignoredanyway", "package.readoly", packageUUID);
+ Identity.instance().checkPermission(
+ new PackageUUIDType(packageUUID), "package.readoly");
}
PackageItem pkg = this.repository.loadPackageByUUID(packageUUID);
List<String> res = new ArrayList<String>();
- AssetItemIterator it = pkg.listAssetsByFormat(new String[] {AssetFormats.MODEL, AssetFormats.DRL_MODEL});
+ AssetItemIterator it = pkg.listAssetsByFormat(new String[] {
+ AssetFormats.MODEL, AssetFormats.DRL_MODEL });
JarInputStream jis = null;
try {
- while(it.hasNext()) {
+ while (it.hasNext()) {
AssetItem asset = (AssetItem) it.next();
if (!asset.isArchived()) {
if (asset.getFormat().equals(AssetFormats.MODEL)) {
- jis = new JarInputStream(asset.getBinaryContentAttachment());
+ jis = new JarInputStream(asset
+ .getBinaryContentAttachment());
JarEntry entry = null;
while ((entry = jis.getNextJarEntry()) != null) {
if (!entry.isDirectory()) {
if (entry.getName().endsWith(".class")) {
- res.add(ModelContentHandler.convertPathToName(entry.getName()));
+ res
+ .add(ModelContentHandler
+ .convertPathToName(entry
+ .getName()));
}
}
}
} else {
- //its delcared model
+ // its delcared model
DrlParser parser = new DrlParser();
try {
- PackageDescr desc = parser.parse(asset.getContent());
- List<TypeDeclarationDescr> types = desc.getTypeDeclarations();
+ PackageDescr desc = parser
+ .parse(asset.getContent());
+ List<TypeDeclarationDescr> types = desc
+ .getTypeDeclarations();
for (TypeDeclarationDescr typeDeclarationDescr : types) {
res.add(typeDeclarationDescr.getTypeName());
}
@@ -1578,36 +1716,36 @@
return res.toArray(new String[res.size()]);
} catch (IOException e) {
log.error(e);
- throw new DetailedSerializableException("Unable to read the jar files in the package.", e.getMessage());
+ throw new DetailedSerializableException(
+ "Unable to read the jar files in the package.", e
+ .getMessage());
} finally {
IOUtils.closeQuietly(jis);
}
-
}
@WebRemote
- //@Restrict("#{identity.loggedIn}")
- @Restrict("#{s:hasRole('admin')}")
+ // @Restrict("#{identity.loggedIn}")
+ @Restrict("#{s:hasRole('admin')}")
public LogEntry[] showLog() {
return LoggingHelper.getMessages();
}
-
@WebRemote
- @Restrict("#{identity.loggedIn}")
+ @Restrict("#{identity.loggedIn}")
public void renameCategory(String fullPathAndName, String newName) {
repository.renameCategory(fullPathAndName, newName);
}
- public static String getDroolsHeader(PackageItem pkg) {
- if (pkg.containsAsset("drools")) {
- return pkg.loadAsset("drools").getContent();
- } else {
- return "";
- }
- }
+ public static String getDroolsHeader(PackageItem pkg) {
+ if (pkg.containsAsset("drools")) {
+ return pkg.loadAsset("drools").getContent();
+ } else {
+ return "";
+ }
+ }
public static void updateDroolsHeader(String string, PackageItem pkg) {
pkg.checkout();
@@ -1625,19 +1763,19 @@
}
-
@WebRemote
- @Restrict("#{identity.loggedIn}")
- public String[] loadDropDownExpression(String[] valuePairs, String expression) {
+ @Restrict("#{identity.loggedIn}")
+ public String[] loadDropDownExpression(String[] valuePairs,
+ String expression) {
Map<String, String> context = new HashMap<String, String>();
for (int i = 0; i < valuePairs.length; i++) {
String[] pair = valuePairs[i].split("=");
context.put(pair[0], pair[1]);
}
- //first interpolate the pairs
+ // first interpolate the pairs
expression = (String) TemplateRuntime.eval(expression, context);
- //now we can eval it for real...
+ // now we can eval it for real...
Object result = MVEL.eval(expression);
if (result instanceof String[]) {
return (String[]) result;
@@ -1654,41 +1792,38 @@
}
}
-
-
@WebRemote
@Restrict("#{identity.loggedIn}")
public void rebuildPackages() throws SerializableException {
- Iterator pkit = repository.listPackages();
- StringBuffer errs = new StringBuffer();
- while(pkit.hasNext()) {
- PackageItem pkg = (PackageItem) pkit.next();
- try {
- BuilderResult[] res = this.buildPackage( pkg.getUUID(), "", true ) ;
- if (res != null) {
- errs.append("Unable to build package name [" + pkg.getName() + "]\n");
- StringBuffer buf = new StringBuffer();
- for ( int i = 0; i < res.length; i++ ) {
- buf.append( res[i].toString() );
- buf.append( '\n' );
- }
- log.warn(buf.toString());
+ Iterator pkit = repository.listPackages();
+ StringBuffer errs = new StringBuffer();
+ while (pkit.hasNext()) {
+ PackageItem pkg = (PackageItem) pkit.next();
+ try {
+ BuilderResult[] res = this
+ .buildPackage(pkg.getUUID(), "", true);
+ if (res != null) {
+ errs.append("Unable to build package name ["
+ + pkg.getName() + "]\n");
+ StringBuffer buf = new StringBuffer();
+ for (int i = 0; i < res.length; i++) {
+ buf.append(res[i].toString());
+ buf.append('\n');
+ }
+ log.warn(buf.toString());
- }
- } catch (Exception e) {
- log.error(e);
- errs.append("An error occurred building package [" + pkg.getName() + "]\n");
- }
- }
+ }
+ } catch (Exception e) {
+ log.error(e);
+ errs.append("An error occurred building package ["
+ + pkg.getName() + "]\n");
+ }
+ }
- if (errs.toString().length() > 0) {
- throw new DetailedSerializableException("Unable to rebuild all packages.", errs.toString());
- }
+ if (errs.toString().length() > 0) {
+ throw new DetailedSerializableException(
+ "Unable to rebuild all packages.", errs.toString());
+ }
}
-
-
-
-
-
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolver.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolver.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,96 @@
+package org.drools.guvnor.server.security;
+
+import static org.jboss.seam.ScopeType.APPLICATION;
+import static org.jboss.seam.annotations.Install.FRAMEWORK;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.drools.guvnor.server.ServiceImplementation;
+import org.drools.repository.PackageItem;
+import org.drools.repository.RulesRepository;
+import org.drools.repository.RulesRepositoryException;
+import org.jboss.seam.Component;
+import org.jboss.seam.Seam;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.Create;
+import org.jboss.seam.annotations.In;
+import org.jboss.seam.annotations.Install;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.annotations.Scope;
+import org.jboss.seam.annotations.Startup;
+import org.jboss.seam.annotations.intercept.BypassInterceptors;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.log.LogProvider;
+import org.jboss.seam.log.Logging;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.security.Role;
+import org.jboss.seam.security.SimplePrincipal;
+import org.jboss.seam.security.permission.PermissionResolver;
+
+/**
+ * Resolves category-based permissions.
+ *
+ * @author Jervis Liu
+ */
+ at Name("org.drools.guvnor.server.security.categoryBasedPermissionResolver")
+ at Scope(APPLICATION)
+ at BypassInterceptors
+ at Install(precedence = org.jboss.seam.annotations.Install.APPLICATION)
+ at Startup
+public class CategoryBasedPermissionResolver implements PermissionResolver,
+ Serializable {
+
+ @Create
+ public void create() {
+ }
+
+ public boolean hasPermission(Object target, String action) {
+ List<RoleBasedPermission> permissions = (List<RoleBasedPermission>) Contexts
+ .getSessionContext().get("packageBasedPermission");
+
+ String requestedPath;
+ if (target instanceof CategoryPathType) {
+ requestedPath = ((CategoryPathType)target).getCategoryPath();
+ } else {
+ // CategoryBasedPermissionResolver only grants permissions based on categoryPath.
+ // Return false if the input is not a categoryPath, as this will be the reponsibility
+ //of other PermissionResolvers in the resolver chain.
+ return false;
+ }
+
+ //the admin can do everything
+ if (Identity.instance().hasRole(RoleTypes.ADMIN)) {
+ return true;
+ }
+
+ //category path based permission check only applies to analyst role. For all the other
+ //roles(admin|package.admin|package.dev|package.readonly) we always grant permisssion.
+ boolean isPermitted = true;
+ for (RoleBasedPermission pbp : permissions) {
+ //the permission check only applies to the analyst role
+ if (RoleTypes.ANALYST.equals(pbp.getRole())) {
+ isPermitted = false;
+ if(isPermitted(requestedPath, pbp.getCategoryPath())) {
+ return true;
+ }
+ }
+ }
+
+ return isPermitted;
+ }
+
+ private boolean isPermitted(String requestedPath, String allowedPath) {
+ return requestedPath.equals(allowedPath) || isSubPath(allowedPath, requestedPath);
+ }
+
+ private boolean isSubPath(String parentPath, String subPath) {
+ //TODO:
+ return false;
+ }
+
+ public void filterSetByAction(Set<Object> targets, String action) {
+ }
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryPathType.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryPathType.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/CategoryPathType.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,19 @@
+package org.drools.guvnor.server.security;
+
+
+/**
+ * This class is used to indicate this is a type that contains categoryPath
+ *
+ */
+public class CategoryPathType {
+ private String categoryPath;
+
+ public CategoryPathType(String categoryPath) {
+ this.categoryPath = categoryPath;
+ }
+
+ String getCategoryPath() {
+ return categoryPath;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedAuthenticator.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedAuthenticator.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedAuthenticator.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -1,55 +0,0 @@
-package org.drools.guvnor.server.security;
-/*
- * 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.List;
-
-import org.apache.log4j.Logger;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.security.Identity;
-
-/**
- * Use this authenticator for package based authentication.
- * @author Jervis Liu
- */
- at Name("packageBasedAuthenticator")
-public class PackageBasedAuthenticator {
-
- private static final Logger log = Logger.getLogger( PackageBasedAuthenticator.class );
-
- public boolean authenticate() {
- if (SecurityServiceImpl.GUEST_LOGIN.equals( Identity.instance().getUsername())) {
- return false;
- }
- log.info( "User logged in via default authentication module (no security check).");
-
- PackageBasedPermissionStore pbps = new PackageBasedPermissionStore();
- List<PackageBasedPermission> permissions = pbps.getPackageBasedPermissionsByUserName(Identity.instance().getUsername());
-
- //The admin role is added into Identity so that we can call Identity.hadRole("admin")
- //later. Other permissions are stored in session context
- for(PackageBasedPermission p : permissions) {
- if(RoleTypes.ADMIN.equalsIgnoreCase(p.getRole())) {
- Identity.instance().addRole(RoleTypes.ADMIN);
- }
- }
- Contexts.getSessionContext().set("packageBasedPermission", permissions);
- return true;
- }
-}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermission.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermission.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermission.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -1,39 +0,0 @@
-package org.drools.guvnor.server.security;
-
-public class PackageBasedPermission {
- private String packageUUID;
- private String userName;
- private String role;
-
- public PackageBasedPermission(String packageUUID, String userName, String role) {
- this.packageUUID = packageUUID;
- this.userName = userName;
- this.role = role;
- }
-
- public String getRole() {
- return role;
- }
-
- public void setRole(String role) {
- this.role = role;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getPackageUUID() {
- return packageUUID;
- }
-
- public void setPackageUUID(String packageUUID) {
- this.packageUUID = packageUUID;
- }
-
-
-}
Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionResolver.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionResolver.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionResolver.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -48,33 +48,39 @@
}
public boolean hasPermission(Object target, String action) {
- List<PackageBasedPermission> permissions = (List<PackageBasedPermission>) Contexts
+ List<RoleBasedPermission> permissions = (List<RoleBasedPermission>) Contexts
.getSessionContext().get("packageBasedPermission");
String targetUUDI = "";
- if (target instanceof String) {
- if (isUUDI((String) target)) {
- targetUUDI = (String) target;
- } else {
- try {
- ServiceImplementation si = (ServiceImplementation) Component
- .getInstance("org.drools.guvnor.client.rpc.RepositoryService");
- PackageItem source = si.repository
- .loadPackage((String) target);
- targetUUDI = source.getUUID();
- } catch (RulesRepositoryException e) {
- //ignore
- }
+
+ if (target instanceof PackageUUIDType) {
+ targetUUDI = ((PackageUUIDType) target).getUUID();
+ } else if (target instanceof PackageNameType) {
+ try {
+ ServiceImplementation si = (ServiceImplementation) Component
+ .getInstance("org.drools.guvnor.client.rpc.RepositoryService");
+ PackageItem source = si.repository
+ .loadPackage(((PackageNameType) target)
+ .getPackageName());
+ targetUUDI = source.getUUID();
+ } catch (RulesRepositoryException e) {
+ return false;
}
+
+ } else {
+ // PackageBasedPermissionResolver only grants permissions based on package info.
+ // Return false if the input is not a pacakge info, as this will be the reponsibility
+ //of other PermissionResolvers in the resolver chain.
+ return false;
}
- //the admin can do everything
+ //admin can do everything
if (Identity.instance().hasRole(RoleTypes.ADMIN)) {
return true;
}
- for (PackageBasedPermission pbp : permissions) {
- //only when the user has the permission to operate the specific action on this package
+ for (RoleBasedPermission pbp : permissions) {
+ //only when the user has the permission to perform the specific action on this package
if (targetUUDI.equalsIgnoreCase(pbp.getPackageUUID())
&& isPermitted(action, pbp.getRole())) {
return true;
@@ -92,10 +98,6 @@
return false;
} else if ("package.developer".equalsIgnoreCase(requestedAction)) {
return true;
- } else if ("package.analyst".equalsIgnoreCase(requestedAction)) {
- return true;
- } else if ("package.testonly".equalsIgnoreCase(requestedAction)) {
- return true;
} else if ("package.readonly".equalsIgnoreCase(requestedAction)) {
return true;
}
@@ -104,10 +106,6 @@
return false;
} else if ("package.developer".equalsIgnoreCase(requestedAction)) {
return false;
- } else if ("package.analyst".equalsIgnoreCase(requestedAction)) {
- return false;
- } else if ("package.testonly".equalsIgnoreCase(requestedAction)) {
- return false;
} else if ("package.readonly".equalsIgnoreCase(requestedAction)) {
return true;
}
@@ -116,15 +114,6 @@
return false;
}
- private boolean isUUDI(String uuid) {
- //hack implementation
- if (uuid.length() < 36) {
- return false;
- } else {
- return true;
- }
- }
-
public void filterSetByAction(Set<Object> targets, String action) {
}
}
Deleted: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionStore.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionStore.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionStore.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -1,36 +0,0 @@
-package org.drools.guvnor.server.security;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class PackageBasedPermissionStore {
- private static List<PackageBasedPermission> pbps = new ArrayList<PackageBasedPermission>();
-
- //Mock data
- static {
- pbps.add(new PackageBasedPermission("631b3d79-5b67-42fb-83da-714624970a6b", "jervis", "package.admin"));
- pbps.add(new PackageBasedPermission("47982482-7912-4881-97ec-e852494383d7", "jervis", "package.guest"));
- //pbps.add(new PackageBasedPermission(null, "jervis", "admin"));
- }
-
- public PackageBasedPermissionStore() {
- }
-
- public List<PackageBasedPermission> getPackageBasedPermissions() {
- return null;
- }
-
- public List<PackageBasedPermission> getPackageBasedPermissionsByUserName(String userName) {
- return pbps;
- }
-
- public List<PackageBasedPermission> getPackageBasedPermissionsByPackage(String packageName) {
- return null;
- }
-
- public void addPackageBasedPermission(PackageBasedPermission pbp) {
- pbps.add(pbp);
- }
-
-
-}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageNameType.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageNameType.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageNameType.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,20 @@
+package org.drools.guvnor.server.security;
+
+
+/**
+ * This class is used to indicate this is a type that contains packageName
+ *
+ */
+public class PackageNameType {
+
+ private String packageName;
+
+ public PackageNameType(String packageName) {
+ this.packageName = packageName;
+ }
+
+ String getPackageName() {
+ return packageName;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageUUIDType.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageUUIDType.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageUUIDType.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,20 @@
+package org.drools.guvnor.server.security;
+
+
+/**
+ * This class is used to indicate this is a type that contains pacakge UUID
+ *
+ */
+public class PackageUUIDType {
+
+ private String uuid;
+
+ public PackageUUIDType(String uuid) {
+ this.uuid = uuid;
+ }
+
+ String getUUID() {
+ return uuid;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java (from rev 21122, labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedAuthenticator.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedAuthenticator.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,55 @@
+package org.drools.guvnor.server.security;
+/*
+ * 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.List;
+
+import org.apache.log4j.Logger;
+import org.jboss.seam.annotations.Name;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.security.Identity;
+
+/**
+ * Use this authenticator for role based authentication.
+ * @author Jervis Liu
+ */
+ at Name("roleBasedAuthenticator")
+public class RoleBasedAuthenticator {
+
+ private static final Logger log = Logger.getLogger(RoleBasedAuthenticator.class);
+
+ public boolean authenticate() {
+ if (SecurityServiceImpl.GUEST_LOGIN.equals( Identity.instance().getUsername())) {
+ return false;
+ }
+ log.info( "User logged in via RoleBasedAuthenticator.");
+
+ RoleBasedPermissionStore pbps = new RoleBasedPermissionStore();
+ List<RoleBasedPermission> permissions = pbps.getRoleBasedPermissionsByUserName(Identity.instance().getUsername());
+
+ //The admin role is added into Identity so that we can call Identity.hadRole("admin")
+ //later. Other permissions are stored in session context
+ for(RoleBasedPermission p : permissions) {
+ if(RoleTypes.ADMIN.equalsIgnoreCase(p.getRole())) {
+ Identity.instance().addRole(RoleTypes.ADMIN);
+ }
+ }
+ Contexts.getSessionContext().set("packageBasedPermission", permissions);
+ return true;
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermission.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermission.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermission.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,49 @@
+package org.drools.guvnor.server.security;
+
+public class RoleBasedPermission {
+ private String packageUUID;
+ private String categoryPath;
+ private String userName;
+ private String role;
+
+ public RoleBasedPermission(String userName, String role, String packageUUID, String categoryPath) {
+ this.packageUUID = packageUUID;
+ this.categoryPath = categoryPath;
+ this.userName = userName;
+ this.role = role;
+ }
+
+ public String getRole() {
+ return role;
+ }
+
+ public void setRole(String role) {
+ this.role = role;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getPackageUUID() {
+ return packageUUID;
+ }
+
+ public void setPackageUUID(String packageUUID) {
+ this.packageUUID = packageUUID;
+ }
+
+ public String getCategoryPath() {
+ return categoryPath;
+ }
+
+ public void setCategoryPath(String categoryPath) {
+ this.categoryPath = categoryPath;
+ }
+
+
+}
Copied: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java (from rev 21122, labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/PackageBasedPermissionStore.java)
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/security/RoleBasedPermissionStore.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,37 @@
+package org.drools.guvnor.server.security;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RoleBasedPermissionStore {
+ private static List<RoleBasedPermission> rbps = new ArrayList<RoleBasedPermission>();
+
+ //Mock data
+ static {
+ rbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_ADMIN, "631b3d79-5b67-42fb-83da-714624970a6b", null));
+ rbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "47982482-7912-4881-97ec-e852494383d7", null));
+ rbps.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category1"));
+ rbps.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category2"));
+ }
+
+ public RoleBasedPermissionStore() {
+ }
+
+ public List<RoleBasedPermission> getRoleBasedPermissions() {
+ return null;
+ }
+
+ public List<RoleBasedPermission> getRoleBasedPermissionsByUserName(String userName) {
+ return rbps;
+ }
+
+ public List<RoleBasedPermission> getRoleBasedPermissionsByPackage(String packageName) {
+ return null;
+ }
+
+ public void addRoleBasedPermission(RoleBasedPermission rbp) {
+ rbps.add(rbp);
+ }
+
+
+}
Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -1917,7 +1917,7 @@
public void testVerifier() throws Exception {
ServiceImplementation impl = getService();
- PackageItem pkg = impl.repository.createPackage("testAnalysis", "");
+ PackageItem pkg = impl.repository.createPackage("testVerifier", "");
AssetItem asset = pkg.addAsset("SomeDRL", "");
asset.updateFormat(AssetFormats.DRL);
Added: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolverTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolverTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/CategoryBasedPermissionResolverTest.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -0,0 +1,61 @@
+package org.drools.guvnor.server.security;
+/*
+ * 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.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.security.Identity;
+
+import junit.framework.TestCase;
+
+public class CategoryBasedPermissionResolverTest extends TestCase {
+
+ public void testAnalyst() throws Exception {
+ //Mock up SEAM contexts
+ Map application = new HashMap<String, Object>();
+ Lifecycle.beginApplication(application);
+ Lifecycle.beginCall();
+ MockIdentity midentity = new MockIdentity();
+ //this makes Identity.hasRole("admin") return false
+ midentity.setHasRole(false);
+ Contexts.getSessionContext().set("org.jboss.seam.security.identity", midentity);
+
+
+ List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_ADMIN, "631b3d79-5b67-42fb-83da-714624970a6b", null));
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "47982482-7912-4881-97ec-e852494383d7", null));
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category1"));
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.ANALYST, null, "category2"));
+ Contexts.getSessionContext().set("packageBasedPermission", pbps);
+
+ CategoryBasedPermissionResolver resolver = new CategoryBasedPermissionResolver();
+ assertTrue(resolver.hasPermission(new CategoryPathType("category1"), null));
+ assertTrue(resolver.hasPermission(new CategoryPathType("category2"), null));
+ assertFalse(resolver.hasPermission(new CategoryPathType("category3/category3"), null));
+ //TODO:
+ //assertTrue(resolver.hasPermission(new CategoryPathType("/category1/category2"), null));
+
+ Lifecycle.endApplication();
+ }
+ }
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/PackageBasedPermissionResolverTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/PackageBasedPermissionResolverTest.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/security/PackageBasedPermissionResolverTest.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -43,15 +43,15 @@
Contexts.getSessionContext().set("org.jboss.seam.security.identity", midentity);
- List<PackageBasedPermission> pbps = new ArrayList<PackageBasedPermission>();
- pbps.add(new PackageBasedPermission("631b3d79-5b67-42fb-83da-714624970a6b", "jervis", RoleTypes.ADMIN));
- pbps.add(new PackageBasedPermission("47982482-7912-4881-97ec-e852494383d7", "jervis", RoleTypes.PACKAGE_READONLY));
+ List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.ADMIN, "631b3d79-5b67-42fb-83da-714624970a6b", null));
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "47982482-7912-4881-97ec-e852494383d7", null));
Contexts.getSessionContext().set("packageBasedPermission", pbps);
PackageBasedPermissionResolver resolver = new PackageBasedPermissionResolver();
- assertTrue(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", "create"));
- assertTrue(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "create"));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("631b3d79-5b67-42fb-83da-714624970a6b"), RoleTypes.ADMIN));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("47982482-7912-4881-97ec-e852494383d7"), RoleTypes.ADMIN));
Lifecycle.endApplication();
}
@@ -68,16 +68,16 @@
Contexts.getSessionContext().set("org.jboss.seam.security.identity", midentity);
- List<PackageBasedPermission> pbps = new ArrayList<PackageBasedPermission>();
- pbps.add(new PackageBasedPermission("631b3d79-5b67-42fb-83da-714624970a6b", "jervis", RoleTypes.PACKAGE_ADMIN));
+ List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_ADMIN, "631b3d79-5b67-42fb-83da-714624970a6b", null));
Contexts.getSessionContext().set("packageBasedPermission", pbps);
PackageBasedPermissionResolver resolver = new PackageBasedPermissionResolver();
- assertTrue(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", "package.admin"));
- assertTrue(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", "package.developer"));
- assertTrue(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", "package.readonly"));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("631b3d79-5b67-42fb-83da-714624970a6b"), RoleTypes.PACKAGE_ADMIN));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("631b3d79-5b67-42fb-83da-714624970a6b"), RoleTypes.PACKAGE_DEVELOPER));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("631b3d79-5b67-42fb-83da-714624970a6b"), RoleTypes.PACKAGE_READONLY));
- assertFalse(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "package.readonly"));
+ assertFalse(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", RoleTypes.PACKAGE_READONLY));
Lifecycle.endApplication();
}
@@ -94,17 +94,17 @@
Contexts.getSessionContext().set("org.jboss.seam.security.identity", midentity);
- List<PackageBasedPermission> pbps = new ArrayList<PackageBasedPermission>();
- pbps.add(new PackageBasedPermission("47982482-7912-4881-97ec-e852494383d7", "jervis", RoleTypes.PACKAGE_DEVELOPER));
+ List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_DEVELOPER, "47982482-7912-4881-97ec-e852494383d7", null));
Contexts.getSessionContext().set("packageBasedPermission", pbps);
PackageBasedPermissionResolver resolver = new PackageBasedPermissionResolver();
- assertFalse(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "package.admin"));
- assertTrue(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "package.developer"));
- assertTrue(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "package.readonly"));
+ assertFalse(resolver.hasPermission(new PackageUUIDType("47982482-7912-4881-97ec-e852494383d7"), RoleTypes.PACKAGE_ADMIN));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("47982482-7912-4881-97ec-e852494383d7"), RoleTypes.PACKAGE_DEVELOPER));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("47982482-7912-4881-97ec-e852494383d7"), RoleTypes.PACKAGE_READONLY));
- assertFalse(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", "package.readonly"));
+ assertFalse(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", RoleTypes.PACKAGE_READONLY));
Lifecycle.endApplication();
}
@@ -121,17 +121,17 @@
Contexts.getSessionContext().set("org.jboss.seam.security.identity", midentity);
- List<PackageBasedPermission> pbps = new ArrayList<PackageBasedPermission>();
- pbps.add(new PackageBasedPermission("47982482-7912-4881-97ec-e852494383d7", "jervis", RoleTypes.PACKAGE_READONLY));
+ List<RoleBasedPermission> pbps = new ArrayList<RoleBasedPermission>();
+ pbps.add(new RoleBasedPermission("jervis", RoleTypes.PACKAGE_READONLY, "47982482-7912-4881-97ec-e852494383d7", null));
Contexts.getSessionContext().set("packageBasedPermission", pbps);
PackageBasedPermissionResolver resolver = new PackageBasedPermissionResolver();
- assertFalse(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "package.admin"));
- assertFalse(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "package.developer"));
- assertTrue(resolver.hasPermission("47982482-7912-4881-97ec-e852494383d7", "package.readonly"));
+ assertFalse(resolver.hasPermission(new PackageUUIDType("47982482-7912-4881-97ec-e852494383d7"), RoleTypes.PACKAGE_DEVELOPER));
+ assertFalse(resolver.hasPermission(new PackageUUIDType("47982482-7912-4881-97ec-e852494383d7"), RoleTypes.PACKAGE_DEVELOPER));
+ assertTrue(resolver.hasPermission(new PackageUUIDType("47982482-7912-4881-97ec-e852494383d7"), RoleTypes.PACKAGE_READONLY));
- assertFalse(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", "package.readonly"));
+ assertFalse(resolver.hasPermission("631b3d79-5b67-42fb-83da-714624970a6b", RoleTypes.PACKAGE_READONLY));
Lifecycle.endApplication();
}
Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java 2008-07-20 13:01:15 UTC (rev 21134)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java 2008-07-21 02:54:47 UTC (rev 21135)
@@ -778,7 +778,7 @@
if ( isNotSnapshot( parentNode ) && parentNode.getPrimaryNodeType().getName().equals( AssetItem.RULE_NODE_TYPE_NAME ) ) {
if ( seekArchivedAsset || !parentNode.getProperty( AssetItem.CONTENT_PROPERTY_ARCHIVE_FLAG ).getBoolean() ) {
AssetItem ai = new AssetItem( this, parentNode );
- if(filter == null || filter.accept(ai, "read")) {
+ if(filter == null || filter.accept(ai, "repackage.readonly")) {
results.add(ai);
rows++;
}
More information about the jboss-svn-commits
mailing list