/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.guvnor.server;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.drools.guvnor.client.rpc.AssetPageRequest;
import org.drools.guvnor.client.rpc.AssetPageResponse;
import org.drools.guvnor.client.rpc.BulkTestRunResult;
import org.drools.guvnor.client.rpc.DetailedSerializationException;
import org.drools.guvnor.client.rpc.RepositoryService;
import org.drools.guvnor.server.repository.MailboxService;
import org.drools.guvnor.server.repository.RepositoryStartupService;
import org.drools.guvnor.server.util.LoggingHelper;
import org.drools.guvnor.server.util.TestEnvironmentSessionHelper;
import org.drools.repository.PackageItem;
import org.drools.repository.RulesRepository;
import org.drools.repository.RulesRepositoryException;
import org.jboss.seam.Component;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.security.AuthorizationException;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
/**
* GWT RPC service endpoint for Repository service. A place to hang some exception handling mainly.
* This passes on all requests unmolested to the underlying ServiceImplemention class.
*
* @author Michael Neale
*/
public class RepositoryServiceServlet extends RemoteServiceServlet
implements
RepositoryService {
private static final LoggingHelper log = LoggingHelper.getLogger( RepositoryServiceServlet.class );
private static boolean testListenerInit = false;
/**
* This is used by the pass through methods below.
* Michael got tired of trying to read other peoples overly abstracted code, so its just generated dumb code to
* reduce dependencies on libraries.
*/
public static ServiceImplementation getService() {
if ( Contexts.isApplicationContextActive() ) {
return (ServiceImplementation) Component.getInstance( "org.drools.guvnor.client.rpc.RepositoryService" );
} else {
//this is only for out of container hosted mode in GWT
synchronized ( RepositoryServiceServlet.class ) {
ServiceImplementation impl = new ServiceImplementation();
impl.repository = new RulesRepository( TestEnvironmentSessionHelper.getSession( false ) );
if ( !testListenerInit ) {
MailboxService.getInstance().init( new RulesRepository( TestEnvironmentSessionHelper.getSession( false ) ) );
RepositoryStartupService.registerCheckinListener();
testListenerInit = true;
}
return impl;
}
}
}
@Override
protected void doUnexpectedFailure(Throwable e) {
if ( e.getCause() instanceof AuthorizationException ) {
HttpServletResponse response = getThreadLocalResponse();
try {
log.error( e.getMessage(),
e.getCause() );
e.printStackTrace();
response.setContentType( "text/plain" );
response.setStatus( HttpServletResponse.SC_UNAUTHORIZED );
response.getWriter().write( "Sorry, insufficient permissions to perform this action." );
} catch ( IOException ex ) {
getServletContext().log( "respondWithUnexpectedFailure failed while sending the previous failure to the client",
ex );
}
} else if ( e.getCause() instanceof RulesRepositoryException ) {
log.error( e.getMessage(),
e.getCause() );
sendErrorMessage( e.getCause().getMessage() );
} else {
if ( e.getCause() != null ) {
log.error( e.getMessage(),
e.getCause() );
e.printStackTrace();
} else {
log.error( e.getMessage(),
e );
e.printStackTrace();
}
sendErrorMessage( "Sorry, a technical error occurred. Please contact a system administrator." );
}
}
private void sendErrorMessage(String msg) {
HttpServletResponse response = getThreadLocalResponse();
response.setContentType( "text/plain" );
response.setStatus( HttpServletResponse.SC_BAD_REQUEST );
try {
response.getWriter().write( msg );
} catch ( IOException ex ) {
getServletContext().log( "respondWithUnexpectedFailure failed while sending the previous failure to the client",
ex );
}
}
/** PLACE THE FOLLOWING IN RepositoryServiceServlet.java **/
public java.lang.String[] loadChildCategories(java.lang.String p0) {
return getService().loadChildCategories( p0 );
}
public org.drools.guvnor.client.rpc.TableDataResult loadRuleListForCategories(java.lang.String p0,
int p1,
int p2,
java.lang.String p3) throws SerializationException {
return getService().loadRuleListForCategories( p0,
p1,
p2,
p3 );
}
public org.drools.guvnor.client.rpc.TableDataResult loadRuleListForState(java.lang.String p0,
int p1,
int p2,
java.lang.String p3) throws SerializationException {
return getService().loadRuleListForState( p0,
p1,
p2,
p3 );
}
public org.drools.guvnor.client.rpc.TableConfig loadTableConfig(java.lang.String p0) {
return getService().loadTableConfig( p0 );
}
public java.lang.Boolean createCategory(java.lang.String p0,
java.lang.String p1,
java.lang.String p2) {
return getService().createCategory( p0,
p1,
p2 );
}
public java.lang.String createNewRule(java.lang.String p0,
java.lang.String p1,
java.lang.String p2,
java.lang.String p3,
java.lang.String p4) throws SerializationException {
return getService().createNewRule( p0,
p1,
p2,
p3,
p4 );
}
public java.lang.String createNewImportedRule(java.lang.String p0,
java.lang.String p1) throws SerializationException {
return getService().createNewImportedRule( p0,
p1 );
}
public void deleteUncheckedRule(java.lang.String p0,
java.lang.String p1) {
getService().deleteUncheckedRule( p0,
p1 );
}
public void clearRulesRepository() {
getService().clearRulesRepository();
}
public org.drools.guvnor.client.rpc.PackageConfigData[] listPackages() {
return getService().listPackages();
}
public org.drools.guvnor.client.rpc.PackageConfigData loadGlobalPackage() {
return getService().loadGlobalPackage();
}
public org.drools.guvnor.client.rpc.PackageConfigData[] listArchivedPackages() {
return getService().listArchivedPackages();
}
public org.drools.guvnor.client.rpc.RuleAsset loadRuleAsset(java.lang.String p0) throws SerializationException {
return getService().loadRuleAsset( p0 );
}
public org.drools.guvnor.client.rpc.RuleAsset[] loadRuleAssets(java.lang.String[] p0) throws SerializationException {
return getService().loadRuleAssets( p0 );
}
public org.drools.guvnor.client.rpc.TableDataResult loadAssetHistory(java.lang.String p0) throws SerializationException {
return getService().loadAssetHistory( p0 );
}
public org.drools.guvnor.client.rpc.TableDataResult loadArchivedAssets(int p0,
int p1) throws SerializationException {
return getService().loadArchivedAssets( p0,
p1 );
}
public java.lang.String checkinVersion(org.drools.guvnor.client.rpc.RuleAsset p0) throws SerializationException {
return getService().checkinVersion( p0 );
}
public void restoreVersion(java.lang.String p0,
java.lang.String p1,
java.lang.String p2) {
getService().restoreVersion( p0,
p1,
p2 );
}
public java.lang.String createPackage(java.lang.String p0,
java.lang.String p1) throws SerializationException {
return getService().createPackage( p0,
p1 );
}
public java.lang.String createSubPackage(java.lang.String p0,
java.lang.String p1,
String parentPackage) throws SerializationException {
return getService().createSubPackage( p0,
p1,
parentPackage );
}
public org.drools.guvnor.client.rpc.PackageConfigData loadPackageConfig(java.lang.String p0) {
return getService().loadPackageConfig( p0 );
}
public org.drools.guvnor.client.rpc.ValidatedResponse savePackage(org.drools.guvnor.client.rpc.PackageConfigData p0) throws SerializationException {
return getService().savePackage( p0 );
}
public AssetPageResponse findAssetPage(AssetPageRequest request) throws SerializationException {
return getService().findAssetPage( request );
}
public org.drools.guvnor.client.rpc.TableDataResult listAssets(java.lang.String p0,
java.lang.String[] p1,
int p2,
int p3,
java.lang.String p4) throws SerializationException {
return getService().listAssets( p0,
p1,
p2,
p3,
p4 );
}
public org.drools.guvnor.client.rpc.TableDataResult listAssetsWithPackageName(java.lang.String p0, java.lang.String[] p1, int p2, int p3, java.lang.String p4) throws SerializationException {
return getService().listAssetsWithPackageName( p0, p1, p2, p3, p4);
}
public java.lang.String[] listStates() throws SerializationException {
return getService().listStates();
}
public java.lang.String createState(java.lang.String p0) throws SerializationException {
return getService().createState( p0 );
}
public void renameState(java.lang.String p0,
java.lang.String p1) throws SerializationException {
getService().renameState( p0,
p1 );
}
public void removeState(java.lang.String p0) throws SerializationException {
getService().removeState( p0 );
}
public void changeState(java.lang.String p0,
java.lang.String p1,
boolean p2) {
getService().changeState( p0,
p1,
p2 );
}
public void changeAssetPackage(java.lang.String p0,
java.lang.String p1,
java.lang.String p2) {
getService().changeAssetPackage( p0,
p1,
p2 );
}
public void promoteAssetToGlobalArea(java.lang.String p0) {
getService().promoteAssetToGlobalArea( p0 );
}
public java.lang.String copyAsset(java.lang.String p0,
java.lang.String p1,
java.lang.String p2) {
return getService().copyAsset( p0,
p1,
p2 );
}
public void copyPackage(java.lang.String p0,
java.lang.String p1) throws SerializationException {
getService().copyPackage( p0,
p1 );
}
public org.drools.guvnor.client.rpc.SnapshotInfo[] listSnapshots(java.lang.String p0) {
return getService().listSnapshots( p0 );
}
public void createPackageSnapshot(java.lang.String p0,
java.lang.String p1,
boolean p2,
java.lang.String p3) {
getService().createPackageSnapshot( p0,
p1,
p2,
p3 );
}
public void copyOrRemoveSnapshot(java.lang.String p0,
java.lang.String p1,
boolean p2,
java.lang.String p3) throws SerializationException {
getService().copyOrRemoveSnapshot( p0,
p1,
p2,
p3 );
}
public void removeCategory(java.lang.String p0) throws SerializationException {
getService().removeCategory( p0 );
}
public org.drools.ide.common.client.modeldriven.SuggestionCompletionEngine loadSuggestionCompletionEngine(java.lang.String p0) throws SerializationException {
return getService().loadSuggestionCompletionEngine( p0 );
}
public org.drools.guvnor.client.rpc.BuilderResult buildPackage(java.lang.String p0,
boolean p1,
java.lang.String p2,
java.lang.String p3,
java.lang.String p4,
boolean p5,
java.lang.String p6,
java.lang.String p7,
boolean p8,
java.lang.String p9) throws SerializationException {
return getService().buildPackage( p0,
p1,
p2,
p3,
p4,
p5,
p6,
p7,
p8,
p9 );
}
public java.lang.String[] getCustomSelectors() throws SerializationException {
return getService().getCustomSelectors();
}
public java.lang.String buildPackageSource(java.lang.String p0) throws SerializationException {
return getService().buildPackageSource( p0 );
}
public java.lang.String buildAssetSource(org.drools.guvnor.client.rpc.RuleAsset p0) throws SerializationException {
return getService().buildAssetSource( p0 );
}
public org.drools.guvnor.client.rpc.BuilderResult buildAsset(org.drools.guvnor.client.rpc.RuleAsset p0) throws SerializationException {
return getService().buildAsset( p0 );
}
public java.lang.String renameAsset(java.lang.String p0,
java.lang.String p1) {
return getService().renameAsset( p0,
p1 );
}
public void renameCategory(java.lang.String p0,
java.lang.String p1) {
getService().renameCategory( p0,
p1 );
}
public void archiveAsset(java.lang.String p0) {
getService().archiveAsset( p0 );
}
public void unArchiveAsset(java.lang.String p0) {
getService().unArchiveAsset( p0 );
}
public void archiveAssets(java.lang.String[] p0,
boolean p1) {
getService().archiveAssets( p0,
p1 );
}
public void removeAsset(java.lang.String p0) {
getService().removeAsset( p0 );
}
public void removeAssets(java.lang.String[] p0) {
getService().removeAssets( p0 );
}
public void removePackage(java.lang.String p0) {
getService().removePackage( p0 );
}
public java.lang.String renamePackage(java.lang.String p0,
java.lang.String p1) {
return getService().renamePackage( p0,
p1 );
}
public void rebuildSnapshots() throws SerializationException {
getService().rebuildSnapshots();
}
public void rebuildPackages() throws SerializationException {
getService().rebuildPackages();
}
public java.lang.String[] listRulesInPackage(java.lang.String p0) throws SerializationException {
return getService().listRulesInPackage( p0 );
}
public org.drools.guvnor.client.rpc.SingleScenarioResult runScenario(java.lang.String p0,
org.drools.ide.common.client.modeldriven.testing.Scenario p1) throws SerializationException {
return getService().runScenario( p0,
p1 );
}
public BulkTestRunResult runScenariosInPackage(PackageItem item) throws DetailedSerializationException,
SerializationException {
return getService().runScenariosInPackage( item );
}
public org.drools.guvnor.client.rpc.BulkTestRunResult runScenariosInPackage(java.lang.String p0) throws SerializationException {
return getService().runScenariosInPackage( p0 );
}
public java.lang.String[] listTypesInPackage(java.lang.String p0) throws SerializationException {
return getService().listTypesInPackage( p0 );
}
public org.drools.guvnor.client.rpc.LogEntry[] showLog() {
return getService().showLog();
}
public void cleanLog() {
getService().cleanLog();
}
public java.lang.String[] loadDropDownExpression(java.lang.String[] p0,
java.lang.String p1) {
return getService().loadDropDownExpression( p0,
p1 );
}
public org.drools.guvnor.client.rpc.TableDataResult quickFindAsset(java.lang.String p0,
boolean p1,
int p2,
int p3) throws SerializationException {
return getService().quickFindAsset( p0,
p1,
p2,
p3 );
}
public org.drools.guvnor.client.rpc.TableDataResult queryFullText(java.lang.String p0,
boolean p1,
int p2,
int p3) throws SerializationException {
return getService().queryFullText( p0,
p1,
p2,
p3 );
}
public org.drools.guvnor.client.rpc.TableDataResult queryMetaData(org.drools.guvnor.client.rpc.MetaDataQuery[] p0,
java.util.Date p1,
java.util.Date p2,
java.util.Date p3,
java.util.Date p4,
boolean p5,
int p6,
int p7) throws SerializationException {
return getService().queryMetaData( p0,
p1,
p2,
p3,
p4,
p5,
p6,
p7 );
}
public java.util.Map listUserPermissions() throws org.drools.guvnor.client.rpc.DetailedSerializationException {
return getService().listUserPermissions();
}
public java.util.Map retrieveUserPermissions(java.lang.String p0) {
return getService().retrieveUserPermissions( p0 );
}
public void updateUserPermissions(java.lang.String p0,
java.util.Map p1) {
getService().updateUserPermissions( p0,
p1 );
}
public java.lang.String[] listAvailablePermissionTypes() {
return getService().listAvailablePermissionTypes();
}
public void deleteUser(java.lang.String p0) {
getService().deleteUser( p0 );
}
public void createUser(java.lang.String p0) {
getService().createUser( p0 );
}
public java.lang.String getAssetLockerUserName(java.lang.String p0) {
return getService().getAssetLockerUserName( p0 );
}
public void lockAsset(java.lang.String p0) {
getService().lockAsset( p0 );
}
public void unLockAsset(java.lang.String p0) {
getService().unLockAsset( p0 );
}
public void installSampleRepository() throws SerializationException {
getService().installSampleRepository();
}
public java.util.List loadDiscussionForAsset(java.lang.String p0) {
return getService().loadDiscussionForAsset( p0 );
}
public java.util.List addToDiscussionForAsset(java.lang.String p0,
java.lang.String p1) {
return getService().addToDiscussionForAsset( p0,
p1 );
}
public void clearAllDiscussionsForAsset(java.lang.String p0) {
getService().clearAllDiscussionsForAsset( p0 );
}
public java.util.List subscribe() {
return getService().subscribe();
}
public org.drools.guvnor.client.rpc.TableDataResult loadInbox(java.lang.String p0) throws org.drools.guvnor.client.rpc.DetailedSerializationException {
return getService().loadInbox( p0 );
}
public org.drools.guvnor.client.rpc.SnapshotDiffs compareSnapshots(java.lang.String p0,
java.lang.String p1,
java.lang.String p2) {
return getService().compareSnapshots( p0,
p1,
p2 );
}
public String processTemplate(String p0,
Map<String, Object> p1) {
return getService().processTemplate( p0,
p1 );
}
public Boolean isHostedMode() {
return getService().isHostedMode();
}
}