blob: 11deaf6631eff63d162577dcba5ed46fef1a4d8f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2011 EclipseSource and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Holger Staudacher - initial API and implementation
*******************************************************************************/
package org.eclipse.libra.warproducts.core;
import org.eclipse.libra.warproducts.core.validation.*;
import org.eclipse.pde.core.plugin.ModelEntry;
import org.eclipse.pde.core.plugin.PluginRegistry;
import org.eclipse.pde.internal.core.iproduct.IProductPlugin;
public class WARProductInitializer {
private IWARProduct product;
public WARProductInitializer( final IWARProduct product ) {
this.product = product;
}
public void initialize() {
Validator validator = new Validator( product );
Validation validation = validator.validate();
if( !validation.isValid() ) {
makeProductValid( validation.getErrors() );
}
}
private void makeProductValid( final ValidationError[] errors ) {
for( int i = 0; i < errors.length; i++ ) {
ValidationError error = errors[ i ];
if( error.getType() == ValidationError.BUNDLE_BANNED ) {
IProductPlugin bundle = ( IProductPlugin )error.getCausingObject();
removeBannedBundle( bundle );
} else if( error.getType() == ValidationError.BUNDLE_MISSING ) {
IProductPlugin bundle = ( IProductPlugin )error.getCausingObject();
addRequiredBundle( bundle );
} else if( error.getType() == ValidationError.LIBRARY_MISSING ) {
WARProductUtil.addServletBridgeFromTarget( product );
}
}
}
private void removeBannedBundle( final IProductPlugin bundle ) {
product.removePlugins( new IProductPlugin[] { bundle } );
}
private void addRequiredBundle( final IProductPlugin requiredBundle ) {
ModelEntry entry = PluginRegistry.findEntry( requiredBundle.getId() );
if( entry != null ) {
WARProductModelFactory factory
= new WARProductModelFactory( product.getModel() );
IProductPlugin bundle = factory.createPlugin();
bundle.setId( requiredBundle.getId() );
bundle.setVersion( requiredBundle.getVersion() );
product.addPlugins( new IProductPlugin[] { bundle } );
}
}
}