Package eu.scape_project.planning.plato.wf

Source Code of eu.scape_project.planning.plato.wf.DefineAlternatives

/*******************************************************************************
* Copyright 2006 - 2012 Vienna University of Technology,
* Department of Software Technology and Interactive Systems, IFS
*
* 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 eu.scape_project.planning.plato.wf;

import java.util.List;

import javax.ejb.Stateful;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;

import org.slf4j.Logger;

import eu.scape_project.planning.exception.PlanningException;
import eu.scape_project.planning.model.Alternative;
import eu.scape_project.planning.model.AlternativesDefinition;
import eu.scape_project.planning.model.FormatInfo;
import eu.scape_project.planning.model.PlanState;
import eu.scape_project.planning.model.PlatoException;
import eu.scape_project.planning.model.PreservationActionDefinition;
import eu.scape_project.planning.services.IServiceInfo;
import eu.scape_project.planning.services.PlanningServiceException;
import eu.scape_project.planning.services.action.ActionInfo;
import eu.scape_project.planning.services.action.IPreservationActionRegistry;
import eu.scape_project.planning.services.pa.PreservationActionRegistryDefinition;
import eu.scape_project.planning.services.pa.PreservationActionRegistryFactory;

/**
* Classed containing the business logic for defining alternatives.
*
* @author Markus Hamm, Michael Kraxner
*/
@Stateful
@ConversationScoped
public class DefineAlternatives extends AbstractWorkflowStep {
    private static final long serialVersionUID = 1966353830236679395L;

    @Inject
    private Logger log;

    /**
     * Creates a new define alternative object.
     */
    public DefineAlternatives() {
        this.requiredPlanState = PlanState.TREE_DEFINED;
        this.correspondingPlanState = PlanState.ALTERNATIVES_DEFINED;
    }

    @Override
    protected void saveStepSpecific() {
        prepareChangesForPersist.prepare(plan);

        saveEntity(plan.getTree());
        plan.setAlternativesDefinition((AlternativesDefinition) saveEntity(plan.getAlternativesDefinition()));

        saveEntity(plan.getRecommendation());
    }

    /**
     * Provides a list of actions available in the given registry for the given
     * formatInfo.
     *
     * @param formatInfo
     *            format info used to query
     * @param registry
     *            registry to query
     * @return a list of preservation action infos
     * @throws PlatoException
     *             if the registry is not properly configured
     */
    public List<IServiceInfo> queryRegistry(FormatInfo formatInfo, PreservationActionRegistryDefinition registry)
        throws PlatoException {
        log.debug("Loading preservation action services from registry [{}]", registry.getShortname());
        IPreservationActionRegistry serviceLocator = null;

        try {
            serviceLocator = PreservationActionRegistryFactory.getInstance(registry);
        } catch (IllegalArgumentException e1) {
            throw new PlatoException("Registry:  " + registry.getShortname()
                + " has changed and needs to be reconfigured.");
        }

        if (serviceLocator == null) {
            throw new PlatoException("Failed to access " + registry.getShortname());
        }

        return serviceLocator.getAvailableActions(formatInfo);
    }

    /**
     * Returns a list of registered preservation action registries.
     *
     * @return a list of registries
     * @throws PlanningServiceException
     *             if the registries could not be found
     */
    public List<PreservationActionRegistryDefinition> getPreservationActionRegistries() throws PlanningServiceException {
        return PreservationActionRegistryFactory.getAvailableRegistries();
    }

    /**
     * Creates an alternative from a action info and adds it to the plan.
     *
     * The provided name is converted to a unique name for the plan.
     *
     * @param actionInfo
     *            the source action info
     * @return the new alternative
     * @throws PlanningException
     *             if the alternative could not be added
     */
    public Alternative addAlternative(IServiceInfo actionInfo) throws PlanningException {
        PreservationActionDefinition actionDefinition = new PreservationActionDefinition();
        actionDefinition.setActionIdentifier(actionInfo.getServiceIdentifier());
        actionDefinition.setShortname(actionInfo.getShortname());
        actionDefinition.setDescriptor(actionInfo.getDescriptor());
        actionDefinition.setUrl(actionInfo.getUrl());
        actionDefinition.setInfo(actionInfo.getInfo());

        String uniqueName = plan.getAlternativesDefinition().createUniqueName(actionDefinition.getShortname());
        Alternative a = Alternative.createAlternative(uniqueName, actionDefinition);
        plan.getAlternativesDefinition().addAlternative(a);
        return a;
    }

    /**
     * Creates an alternative from a action info and adds it to the plan.
     *
     * The provided name is converted to a unique name for the plan.
     *
     * @param actionInfo
     *            the source action info
     * @return the new alternative
     * @throws PlanningException
     *             if the alternative could not be added
     */
    public Alternative addAlternative(ActionInfo actionInfo) throws PlanningException {
        PreservationActionDefinition actionDefinition = new PreservationActionDefinition();
        actionDefinition.setShortname(actionInfo.getShortname());
        actionDefinition.setDescriptor(actionInfo.getDescriptor());
        actionDefinition.setInfo(actionInfo.getInfo());
        actionDefinition.setActionIdentifier(actionInfo.getActionIdentifier());
        actionDefinition.setParams(actionInfo.getParams());
        actionDefinition.setParameterInfo(actionInfo.getParameterInfo());
        actionDefinition.setUrl(actionInfo.getUrl());
        actionDefinition.setTargetFormatInfo(actionInfo.getTargetFormatInfo());
        actionDefinition.setTargetFormat(actionInfo.getTargetFormat());
        actionDefinition.setEmulated(actionInfo.isEmulated());
        actionDefinition.setExecutable(actionInfo.isExecutable());

        String uniqueName = plan.getAlternativesDefinition().createUniqueName(actionDefinition.getShortname());
        Alternative a = Alternative.createAlternative(uniqueName, actionDefinition);
        plan.getAlternativesDefinition().addAlternative(a);
        return a;
    }

    /**
     * Creates an alternative with the provided name and description and adds it
     * to the plan.
     *
     * The provided name is converted to a unique name for the plan.
     *
     * @param name
     *            alternative name
     * @param description
     *            alternative description
     * @return the new alternative
     * @throws PlanningException
     *             if the alternative could not be added
     */
    @SuppressWarnings("deprecation")
    public Alternative addAlternative(String name, String description) throws PlanningException {
        Alternative a = Alternative.createAlternative();
        a.setName(plan.getAlternativesDefinition().createUniqueName(name));
        a.setDescription(description);
        plan.getAlternativesDefinition().addAlternative(a);
        return a;
    }

    /**
     * Adds the provided alternative to the plan.
     *
     * @param alternative
     *            the alternative to add
     * @throws PlanningException
     *             if the alternative could not be added
     */
    public void addAlternative(Alternative alternative) throws PlanningException {
        plan.getAlternativesDefinition().addAlternative(alternative);
    }
}
TOP

Related Classes of eu.scape_project.planning.plato.wf.DefineAlternatives

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.