package umlhandler.popup.actions; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import javax.swing.JOptionPane; import javax.swing.ProgressMonitor; import org.apache.commons.lang.StringUtils; import org.apache.http.HttpHost; import org.apache.http.ParseException; import org.apache.http.auth.AuthScope; import org.apache.http.auth.Credentials; import org.apache.http.auth.NTCredentials; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPatch; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.WinHttpClients; import org.apache.http.util.EntityUtils; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourceAttributes; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.papyrus.editor.PapyrusMultiDiagramEditor; import org.eclipse.papyrus.infra.core.editor.ModelSetServiceFactory; import org.eclipse.papyrus.infra.core.resource.EditingDomainServiceFactory; import org.eclipse.papyrus.infra.core.resource.IModel; import org.eclipse.papyrus.infra.core.resource.ModelSet; import org.eclipse.papyrus.infra.core.resource.sasheditor.DiModel; import org.eclipse.papyrus.infra.core.services.ServiceDescriptor; import org.eclipse.papyrus.infra.core.services.ServiceDescriptor.ServiceTypeKind; import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.core.services.ServiceMultiException; import org.eclipse.papyrus.infra.core.services.ServiceStartKind; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; import org.eclipse.papyrus.infra.core.utils.ServiceUtils; import org.eclipse.papyrus.infra.core.utils.DiResourceSet; import org.eclipse.papyrus.infra.onefile.model.IPapyrusFile; import org.eclipse.papyrus.infra.onefile.model.impl.PapyrusFile; import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor; import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForActionHandlers; import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForHandlers; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.uml2.uml.Activity; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Operation; import org.eclipse.uml2.uml.Parameter; import org.eclipse.uml2.uml.ParameterDirectionKind; import org.eclipse.uml2.uml.TemplateParameter; import org.eclipse.uml2.uml.UMLFactory; import org.eclipse.uml2.uml.UMLPackage; import org.eclipse.uml2.uml.internal.operations.TypeOperations; import org.eclipse.uml2.uml.resource.UMLResource; import org.json.JSONObject; import org.eclipse.papyrus.infra.emf.utils.ResourceUtils; import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForResourceSet; import org.eclipse.papyrus.infra.gmfdiag.export.utils.SelectionHelper; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.XMIResource; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl; import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl; import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.ocl.pivot.PivotFactory; import org.eclipse.ocl.pivot.internal.manager.PivotMetamodelManager; import org.eclipse.ocl.pivot.internal.utilities.EnvironmentFactoryInternal; import org.eclipse.ocl.pivot.utilities.EnvironmentFactory; import org.eclipse.ocl.pivot.utilities.MetamodelManager; import org.apache.commons.io.FilenameUtils; import org.eclipse.papyrus.infra.gmfdiag.export.engine.ExportDiagramLocalPageService; import org.eclipse.papyrus.infra.gmfdiag.export.messages.Messages; import org.eclipse.papyrus.infra.gmfdiag.export.Activator; import org.eclipse.papyrus.infra.services.semantic.service.SemanticService; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.papyrus.infra.core.sashwindows.di.service.IPageManager; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.uml2.uml.util.UMLUtil.StereotypeApplicationHelper; import org.eclipse.papyrus.sysml14.activities.ActivitiesPackage; import org.eclipse.emf.transaction.RecordingCommand; public class LoadUMLHandler extends AbstractHandler{ public static List UmlResources = new ArrayList(); @Override public Object execute(ExecutionEvent event) throws ExecutionException { //GOOD!!! IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event); Object firstElement = selection.getFirstElement(); if (firstElement instanceof ModelSet) { ModelSet modelSet=(ModelSet)firstElement; System.out.println("AAA"); } if (firstElement instanceof IAdaptable) { IFile f = (IFile)((IAdaptable)firstElement).getAdapter(IFile.class); System.out.println("Project name: "+ FilenameUtils.removeExtension(f.getName())); System.out.println("Full path: "+Paths.get(f.getRawLocation().makeAbsolute().toString()).getParent().toString()); try { GetDiagrams(f); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } //https://stackoverflow.com/questions/28430303/how-to-export-a-gmf-diagram-outside-eclipse private void GetDiagrams(IFile projectFile) throws Exception { // TODO Auto-generated method stub String projectPath = Paths.get(projectFile.getRawLocation().makeAbsolute().toString()).getParent().toString(); String projectName = FilenameUtils.removeExtension(projectFile.getName()); File uml = /*(File)getPFile("uml");*/new File(projectPath+"\\"+projectName+".uml"/*"D:\\Code\\Papirus_Research\\ASKT\\ASKT.uml"*/); File di = /*(File)getPFile("di");//*/new File(projectPath+"\\"+projectName+".di"/*"D:\\Code\\Papirus_Research\\ASKT\\ASKT.di"*/); File notation = /*(File)getPFile("notation");//*/new File(projectPath+"\\"+projectName+".notation"/*"D:\\Code\\Papirus_Research\\ASKT\\ASKT.notation"*/); URI umlUri = URI.createFileURI(uml.getAbsolutePath()); URI diUri = URI.createFileURI(di.getAbsolutePath()); URI notationUri = URI.createFileURI(notation.getAbsolutePath()); final ModelSet resourceSet = new ModelSet(); resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE); resourceSet.getPackageRegistry().put(NotationPackage.eNS_URI, NotationPackage.eINSTANCE); resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()); resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("notation", new XMIResourceFactoryImpl()); resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE); try { resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, true); resourceSet.getLoadOptions().put(XMLResource.OPTION_DEFER_ATTACHMENT, true); resourceSet.getResource(diUri, true); resourceSet.getResource(umlUri, true); resourceSet.getResource(notationUri, true); List diagrams = new ArrayList(); List activitis = new ArrayList(); TreeIterator contents = resourceSet.getAllContents(); for (Iterator i = contents; i.hasNext();) { Notifier n = i.next(); if (n instanceof Diagram) { diagrams.add((Diagram) n); } if (n instanceof Activity) { activitis.add((Activity) n); //MetamodelManager mm ;//= PivotUtil.(); Activity activity = (Activity) n; System.out.println("---"); activity.createOwnedParameterSet("123");//!!!!!!! } } //!!!!!!!!!!!!nullpointerexception //resourceSet.save(new NullProgressMonitor()); //resourceSet.save(null); JOptionPane.showMessageDialog(null, "!!! ", "UML Handler: ", JOptionPane.INFORMATION_MESSAGE); //export(diagrams); } finally { // Unload the resource set so that we don't leak loads of UML content in the CacheAdapter //unload(resourceSet); } } }