/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package cb.xmi;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Stack;
import ru.novosoft.uml.MExtension;
import ru.novosoft.uml.MFactory;
import ru.novosoft.uml.behavior.activity_graphs.MActionState;
import ru.novosoft.uml.behavior.activity_graphs.MActivityGraph;
import ru.novosoft.uml.behavior.activity_graphs.MCallState;
import ru.novosoft.uml.behavior.activity_graphs.MClassifierInState;
import ru.novosoft.uml.behavior.activity_graphs.MObjectFlowState;
import ru.novosoft.uml.behavior.activity_graphs.MPartition;
import ru.novosoft.uml.behavior.activity_graphs.MSubactivityState;
import ru.novosoft.uml.behavior.collaborations.MAssociationEndRole;
import ru.novosoft.uml.behavior.collaborations.MAssociationRole;
import ru.novosoft.uml.behavior.collaborations.MClassifierRole;
import ru.novosoft.uml.behavior.collaborations.MCollaboration;
import ru.novosoft.uml.behavior.collaborations.MInteraction;
import ru.novosoft.uml.behavior.collaborations.MMessage;
import ru.novosoft.uml.behavior.common_behavior.MAction;
import ru.novosoft.uml.behavior.common_behavior.MActionSequence;
import ru.novosoft.uml.behavior.common_behavior.MArgument;
import ru.novosoft.uml.behavior.common_behavior.MAttributeLink;
import ru.novosoft.uml.behavior.common_behavior.MCallAction;
import ru.novosoft.uml.behavior.common_behavior.MComponentInstance;
import ru.novosoft.uml.behavior.common_behavior.MCreateAction;
import ru.novosoft.uml.behavior.common_behavior.MDataValue;
import ru.novosoft.uml.behavior.common_behavior.MDestroyAction;
import ru.novosoft.uml.behavior.common_behavior.MException;
import ru.novosoft.uml.behavior.common_behavior.MInstance;
import ru.novosoft.uml.behavior.common_behavior.MLink;
import ru.novosoft.uml.behavior.common_behavior.MLinkEnd;
import ru.novosoft.uml.behavior.common_behavior.MLinkObject;
import ru.novosoft.uml.behavior.common_behavior.MNodeInstance;
import ru.novosoft.uml.behavior.common_behavior.MObject;
import ru.novosoft.uml.behavior.common_behavior.MReception;
import ru.novosoft.uml.behavior.common_behavior.MReturnAction;
import ru.novosoft.uml.behavior.common_behavior.MSendAction;
import ru.novosoft.uml.behavior.common_behavior.MSignal;
import ru.novosoft.uml.behavior.common_behavior.MStimulus;
import ru.novosoft.uml.behavior.common_behavior.MTerminateAction;
import ru.novosoft.uml.behavior.common_behavior.MUninterpretedAction;
import ru.novosoft.uml.behavior.state_machines.MCallEvent;
import ru.novosoft.uml.behavior.state_machines.MChangeEvent;
import ru.novosoft.uml.behavior.state_machines.MCompositeState;
import ru.novosoft.uml.behavior.state_machines.MFinalState;
import ru.novosoft.uml.behavior.state_machines.MGuard;
import ru.novosoft.uml.behavior.state_machines.MPseudostate;
import ru.novosoft.uml.behavior.state_machines.MSignalEvent;
import ru.novosoft.uml.behavior.state_machines.MSimpleState;
import ru.novosoft.uml.behavior.state_machines.MState;
import ru.novosoft.uml.behavior.state_machines.MStateMachine;
import ru.novosoft.uml.behavior.state_machines.MStubState;
import ru.novosoft.uml.behavior.state_machines.MSubmachineState;
import ru.novosoft.uml.behavior.state_machines.MSynchState;
import ru.novosoft.uml.behavior.state_machines.MTimeEvent;
import ru.novosoft.uml.behavior.state_machines.MTransition;
import ru.novosoft.uml.behavior.use_cases.MActor;
import ru.novosoft.uml.behavior.use_cases.MExtend;
import ru.novosoft.uml.behavior.use_cases.MExtensionPoint;
import ru.novosoft.uml.behavior.use_cases.MInclude;
import ru.novosoft.uml.behavior.use_cases.MUseCase;
import ru.novosoft.uml.behavior.use_cases.MUseCaseInstance;
import ru.novosoft.uml.foundation.core.MAbstraction;
import ru.novosoft.uml.foundation.core.MAssociation;
import ru.novosoft.uml.foundation.core.MAssociationClass;
import ru.novosoft.uml.foundation.core.MAssociationEnd;
import ru.novosoft.uml.foundation.core.MAttribute;
import ru.novosoft.uml.foundation.core.MBinding;
import ru.novosoft.uml.foundation.core.MClass;
import ru.novosoft.uml.foundation.core.MClassifier;
import ru.novosoft.uml.foundation.core.MComment;
import ru.novosoft.uml.foundation.core.MComponent;
import ru.novosoft.uml.foundation.core.MConstraint;
import ru.novosoft.uml.foundation.core.MDataType;
import ru.novosoft.uml.foundation.core.MDependency;
import ru.novosoft.uml.foundation.core.MElementResidence;
import ru.novosoft.uml.foundation.core.MFlow;
import ru.novosoft.uml.foundation.core.MGeneralization;
import ru.novosoft.uml.foundation.core.MInterface;
import ru.novosoft.uml.foundation.core.MMethod;
import ru.novosoft.uml.foundation.core.MModelElement;
import ru.novosoft.uml.foundation.core.MNamespace;
import ru.novosoft.uml.foundation.core.MNode;
import ru.novosoft.uml.foundation.core.MOperation;
import ru.novosoft.uml.foundation.core.MParameter;
import ru.novosoft.uml.foundation.core.MPermission;
import ru.novosoft.uml.foundation.core.MPresentationElement;
import ru.novosoft.uml.foundation.core.MRelationship;
import ru.novosoft.uml.foundation.core.MTemplateParameter;
import ru.novosoft.uml.foundation.core.MUsage;
import ru.novosoft.uml.foundation.extension_mechanisms.MStereotype;
import ru.novosoft.uml.foundation.extension_mechanisms.MTaggedValue;
import ru.novosoft.uml.model_management.MElementImport;
import ru.novosoft.uml.model_management.MModel;
import ru.novosoft.uml.model_management.MPackage;
import ru.novosoft.uml.model_management.MSubsystem;
import cb.parser.PrintVisitor;
import cb.petal.ClassCategory;
import cb.petal.PetalFile;
import cb.util.PetalObjectFactory;
/**
* Convert an <a href="http://xml.coverpages.org/xmi.html">XMI</a> file into a Rose Petal file.
*
* @version $Id: RoseGenerator.java,v 1.2 2011/09/12 11:47:01 gpolet Exp $
* @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
*/
public class RoseGenerator /*extends DescendingVisitor*/{
/**
* Where to dump the XMI file
*/
protected String dump;
/**
* Which factory to use
*/
protected static PetalObjectFactory factory = PetalObjectFactory.getInstance();
/**
* The Rose Petal file to convert
*/
protected PetalFile tree;
/**
* The XMI model being set up
*/
protected MModel model;
/**
* Stack<ClassCategory>
*/
private Stack packages = new Stack();
/**
* The current package level (may be nested)
*/
private ClassCategory pack;
/**
* Use that until NSUML has visitors.
*/
private Dispatcher d = new Dispatcher(this);
/**
* Register created objects by the quid of the petal object.
*/
protected HashMap quid_map = new HashMap(); // Map<quid, MClassifier>
protected HashMap package_map = new HashMap(); // Map<ClassCategory, MPackage>
/**
* @param model
* the XMI model to convert
* @param dump
* where to dump the generated petal file
*/
public RoseGenerator(MModel model, String dump) {
this.dump = dump;
this.model = model;
tree = factory.createModel();
}
/**
* Start generation of Petal file.
*/
public void start() {
d.accept(model); // Should read: model.accept(this) ...
}
public void dump() throws IOException {
PrintStream os = new PrintStream(new FileOutputStream(dump));
tree.accept(new PrintVisitor(os));
os.close();
}
/**
* @return generated model
*/
public PetalFile getModel() {
return tree;
}
public void visit(MExtension obj) {
}
public void visit(MFactory obj) {
}
public void visit(MActionState obj) {
}
public void visit(MActivityGraph obj) {
}
public void visit(MCallState obj) {
}
public void visit(MClassifierInState obj) {
}
public void visit(MObjectFlowState obj) {
}
public void visit(MPartition obj) {
}
public void visit(MSubactivityState obj) {
}
public void visit(MAssociationEndRole obj) {
}
public void visit(MAssociationRole obj) {
}
public void visit(MClassifierRole obj) {
}
public void visit(MCollaboration obj) {
}
public void visit(MInteraction obj) {
}
public void visit(MMessage obj) {
}
public void visit(MAction obj) {
}
public void visit(MActionSequence obj) {
}
public void visit(MArgument obj) {
}
public void visit(MAttributeLink obj) {
}
public void visit(MCallAction obj) {
}
public void visit(MComponentInstance obj) {
}
public void visit(MCreateAction obj) {
}
public void visit(MDataValue obj) {
}
public void visit(MDestroyAction obj) {
}
public void visit(MException obj) {
}
public void visit(MInstance obj) {
}
public void visit(MLinkEnd obj) {
}
public void visit(MLink obj) {
}
public void visit(MLinkObject obj) {
}
public void visit(MNodeInstance obj) {
}
public void visit(MObject obj) {
}
public void visit(MReception obj) {
}
public void visit(MReturnAction obj) {
}
public void visit(MSendAction obj) {
}
public void visit(MSignal obj) {
}
public void visit(MStimulus obj) {
}
public void visit(MTerminateAction obj) {
}
public void visit(MUninterpretedAction obj) {
}
public void visit(MCallEvent obj) {
}
public void visit(MChangeEvent obj) {
}
public void visit(MCompositeState obj) {
}
public void visit(MFinalState obj) {
}
public void visit(MGuard obj) {
}
public void visit(MPseudostate obj) {
}
public void visit(MSignalEvent obj) {
}
public void visit(MSimpleState obj) {
}
public void visit(MState obj) {
}
public void visit(MStateMachine obj) {
}
public void visit(MStubState obj) {
}
public void visit(MSubmachineState obj) {
}
public void visit(MSynchState obj) {
}
public void visit(MTimeEvent obj) {
}
public void visit(MTransition obj) {
}
public void visit(MActor obj) {
}
public void visit(MExtend obj) {
}
public void visit(MExtensionPoint obj) {
}
public void visit(MInclude obj) {
}
public void visit(MUseCase obj) {
}
public void visit(MUseCaseInstance obj) {
}
public void visit(MAbstraction obj) {
}
public void visit(MAssociationClass obj) {
}
public void visit(MAssociationEnd obj) {
}
public void visit(MAssociation obj) {
}
public void visit(MAttribute obj) {
}
public void visit(MBinding obj) {
}
public void visit(MClass obj) {
}
public void visit(MClassifier obj) {
}
public void visit(MComment obj) {
}
public void visit(MComponent obj) {
}
public void visit(MConstraint obj) {
}
public void visit(MDataType obj) {
}
public void visit(MDependency obj) {
}
public void visit(MElementResidence obj) {
}
public void visit(MFlow obj) {
}
public void visit(MGeneralization obj) {
}
public void visit(MInterface obj) {
}
public void visit(MMethod obj) {
}
public void visit(MNamespace obj) {
}
public void visit(MNode obj) {
}
public void visit(MOperation obj) {
}
public void visit(MParameter obj) {
}
public void visit(MPermission obj) {
}
public void visit(MPresentationElement obj) {
}
public void visit(MRelationship obj) {
}
public void visit(MTemplateParameter obj) {
}
public void visit(MUsage obj) {
}
public void visit(MElementImport obj) {
}
public void visit(MModel obj) {
tree.setModelName(obj.getName());
for (Iterator i = obj.getOwnedElements().iterator(); i.hasNext();) {
d.accept((MModelElement) i.next());
}
}
public void visit(MPackage obj) {
}
public void visit(MSubsystem obj) {
}
public void visit(MStereotype obj) {
}
public void visit(MTaggedValue obj) {
}
}