/*
* 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.
*/
package org.drools.guvnor.server.standalonededitor;
import java.util.ArrayList;
import java.util.List;
import org.drools.guvnor.client.common.AssetFormats;
import org.drools.guvnor.client.rpc.DetailedSerializationException;
import org.drools.guvnor.client.rpc.MetaData;
import org.drools.guvnor.client.rpc.RuleAsset;
import org.drools.guvnor.server.RepositoryServiceServlet;
import org.drools.guvnor.server.ServiceImplementation;
import org.drools.ide.common.client.modeldriven.brl.RuleModel;
import org.drools.ide.common.server.util.BRXMLPersistence;
/**
* BRL -> RuleAsset converter used by standalone editor.
* For each brl provided, a new RuleAsset is created. The name of the RuleAsset
* will be the name present in the brl concatenated with a unique number.
* @author esteban.aliverti
*/
public class BRLRuleAssetProvider
implements
RuleAssetProvider {
private String packageName;
private String[] initialBRLs;
public BRLRuleAssetProvider(String packageName,
String[] initialBRLs) {
this.packageName = packageName;
this.initialBRLs = initialBRLs;
}
public RuleAsset[] getRuleAssets() throws DetailedSerializationException {
List<RuleModel> models = new ArrayList<RuleModel>( initialBRLs.length );
List<RuleAsset> assets = new ArrayList<RuleAsset>( initialBRLs.length );
//We wan't to avoid inconsistent states, that is why we first unmarshal
//each brl and then (if nothing fails) create each rule
for ( String brl : initialBRLs ) {
//convert the BRL to RuleModel
models.add( BRXMLPersistence.getInstance().unmarshal( brl ) );
}
//no unmarshal errors, it's time to create the rules
try {
for ( RuleModel ruleModel : models ) {
assets.add( this.createAsset( ruleModel ) );
}
} catch ( Exception e ) {
//if something failed, delete the generated assets
for ( RuleAsset ruleAsset : assets ) {
this.getService().removeAsset( ruleAsset.uuid );
}
if ( e instanceof DetailedSerializationException ) {
throw (DetailedSerializationException) e;
}
throw new DetailedSerializationException( "Error creating assets",
e.getMessage() );
}
return assets.toArray( new RuleAsset[assets.size()] );
}
private RuleAsset createAsset(RuleModel ruleModel) {
RuleAsset asset = new RuleAsset();
asset.uuid = "mock";
asset.content = ruleModel;
asset.metaData = createMetaData( ruleModel );
return asset;
}
private MetaData createMetaData(RuleModel ruleModel) {
MetaData metaData = new MetaData();
metaData.name = ruleModel.name;
metaData.packageName = packageName;
metaData.format = AssetFormats.BUSINESS_RULE;
metaData.packageUUID = "mock";
return metaData;
}
private ServiceImplementation getService() {
return RepositoryServiceServlet.getService();
}
}