/** * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/lgpl-3.0.txt * * 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. */ /** * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/lgpl-3.0.txt * * 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. */ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.kevoree.tools.ui.editor.command; import org.kevoree.*; import org.kevoree.factory.DefaultKevoreeFactory; import org.kevoree.pmodeling.api.json.JSONModelLoader; import org.kevoree.tools.ui.editor.KevoreeUIKernel; import org.kevoree.tools.ui.editor.MetaDataHelper; import org.kevoree.tools.ui.editor.ModelHelper; import org.kevoree.tools.ui.editor.listener.NodeDragSourceListener; import org.kevoree.tools.ui.editor.widget.TempGroupBinding; import org.kevoree.tools.ui.framework.elements.*; import org.kevoree.tools.ui.framework.elements.PortPanel.PortType; import java.awt.*; import java.io.InputStream; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; /** * @author ffouquet */ public class LoadModelCommand implements Command { public Boolean merge = false; ReloadTypePalette subCommand = new ReloadTypePalette(); public void setKernel(KevoreeUIKernel kernel) { this.kernel = kernel; subCommand.setKernel(this.kernel); } private KevoreeUIKernel kernel; /* Input expected : Model URI */ @Override public void execute(Object p) { ContainerRoot modelToLoad; if (p instanceof ContainerRoot) { modelToLoad = (ContainerRoot) p; } else { JSONModelLoader modelLoader = new JSONModelLoader(new DefaultKevoreeFactory()); if (p instanceof InputStream) { modelToLoad = (ContainerRoot) modelLoader.loadModelFromStream((InputStream) p).get(0); } else { modelToLoad = (ContainerRoot) modelLoader.loadModelFromString(p.toString()).get(0); } } ModelHelper.kevoreeFactory().root(modelToLoad); ClearModelCommand clearModelCommand = new ClearModelCommand(); clearModelCommand.setKernel(kernel); clearModelCommand.execute(null); kernel.getModelHandler().setActualModel(modelToLoad); //HACK :-) TODO REMOVE kernel.getUifactory().getMapping().bind(kernel.getModelPanel(), modelToLoad); /* Synch every UI Component */ //LOAD COMPONENT TYPE subCommand.execute(null); //FIND TOP LEVEL NODE HashSet<ContainerNode> childNodes = new HashSet<ContainerNode>(); for (ContainerNode newnode : kernel.getModelHandler().getActualModel().getNodes()) { childNodes.addAll(newnode.getHosts()); } //LOAD NODE for (ContainerNode newnode : kernel.getModelHandler().getActualModel().getNodes()) { if (!childNodes.contains(newnode)) { loadNodes(null, newnode); } } //LOAD HUB for (Channel hub : kernel.getModelHandler().getActualModel().getHubs()) { ChannelPanel newhubpanel = kernel.getUifactory().createHub(hub); kernel.getModelPanel().addHub(newhubpanel); HashMap<String, String> metaData = MetaDataHelper.getMetaDataFromInstance(hub); if (MetaDataHelper.containKeys(Arrays.asList("x", "y"), metaData)) { newhubpanel.setLocation(new Point(Integer.parseInt(metaData.get("x").toString()), Integer.parseInt(metaData.get("y").toString()))); } } //LOAD GROUP for (Group group : kernel.getModelHandler().getActualModel().getGroups()) { GroupPanel newgrouppanel = kernel.getUifactory().createGroup(group); kernel.getModelPanel().addGroup(newgrouppanel); //LOAD GROUP BINDINGS for (ContainerNode subNode : group.getSubNodes()) { NodePanel nodePanel = (NodePanel) kernel.getUifactory().getMapping().get(subNode); TempGroupBinding groupB = new TempGroupBinding(); groupB.setOriginGroup(group); groupB.setTargetNode(subNode); groupB.setGroupPanel(newgrouppanel.getAnchor()); groupB.setNodePanel(nodePanel); Binding uib = kernel.getUifactory().createGroupBinding(groupB); kernel.getModelPanel().addBinding(uib); } HashMap<String, String> metaData = MetaDataHelper.getMetaDataFromInstance(group); if (MetaDataHelper.containKeys(Arrays.asList("x", "y"), metaData)) { newgrouppanel.setLocation(new Point(Integer.parseInt(metaData.get("x").toString()), Integer.parseInt(metaData.get("y").toString()))); } } //LOAD BINDING /* for (Binding binding : kernel.getModelHandler().getActualModel().getBindings()) { org.kevoree.ui.framework.elements.Binding uib = kernel.getUifactory().createBinding(binding); kernel.getModelPanel().removeBinding(uib); }*/ //LOAD MBINDING for (MBinding binding : kernel.getModelHandler().getActualModel().getmBindings()) { Binding uib = kernel.getUifactory().createMBinding(binding); kernel.getModelPanel().addBinding(uib); } kernel.getEditorPanel().unshowPropertyEditor(); //CLOSE PROPERTY EDITOR IF OPEN //REFRESH UI kernel.getEditorPanel().doLayout(); kernel.getEditorPanel().repaint(); kernel.getEditorPanel().revalidate(); kernel.getModelHandler().notifyChanged(); } public void loadNodes(NodePanel parentPanel, ContainerNode newnode) { NodePanel newnodepanel = kernel.getUifactory().createComponentNode(newnode); if (parentPanel == null) { kernel.getModelPanel().addNode(newnodepanel); } else { parentPanel.add(newnodepanel); NodeDragSourceListener sourceListener = new NodeDragSourceListener(newnodepanel, kernel); } //UI HashMap<String, String> metaData = MetaDataHelper.getMetaDataFromInstance(newnode); if (MetaDataHelper.containKeys(Arrays.asList("x", "y"), metaData)) { newnodepanel.setLocation(new Point(Integer.parseInt(metaData.get("x").toString()), Integer.parseInt(metaData.get("y").toString()))); } for (ComponentInstance ci : newnode.getComponents()) { ComponentPanel insPanel = kernel.getUifactory().createComponentInstance(ci); for (Port portP : ci.getProvided()) { //ADDING NEW PORT TO UI PortPanel portPanel = kernel.getUifactory().createPort(portP); portPanel.setType(PortType.PROVIDED); insPanel.addLeft(portPanel); } for (Port portR : ci.getRequired()) { //ADDING NEW PORT TO UI PortPanel portPanel = kernel.getUifactory().createPort(portR); portPanel.setType(PortType.REQUIRED); insPanel.addRight(portPanel); } newnodepanel.add(insPanel); //kernel.getModelPanel().add(insPanel); } //load child nodes for (ContainerNode childNode : newnode.getHosts()) { loadNodes(newnodepanel, childNode); } } }