-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Draft for update infra of plant hier
- Loading branch information
1 parent
8ca8d16
commit 281f523
Showing
16 changed files
with
616 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
116 changes: 116 additions & 0 deletions
116
.../org/eclipse/fordiac/ide/hierarchymanager/ui/listeners/HierachyManagerUpdateListener.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2024 Primetals Technology Austria GmbH | ||
* | ||
* This program and the accompanying materials are made available under the | ||
* terms of the Eclipse Public License 2.0 which is available at | ||
* http://www.eclipse.org/legal/epl-2.0. | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Michael Oberlehner - initial API and implementation and/or initial documentation | ||
*******************************************************************************/ | ||
package org.eclipse.fordiac.ide.hierarchymanager.ui.listeners; | ||
|
||
import java.util.ArrayList; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import org.eclipse.core.commands.operations.AbstractOperation; | ||
import org.eclipse.core.resources.IProject; | ||
import org.eclipse.emf.ecore.EObject; | ||
import org.eclipse.emf.ecore.resource.ResourceSet; | ||
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; | ||
import org.eclipse.emf.ecore.xmi.XMLResource; | ||
import org.eclipse.emf.ecore.xmi.impl.XMLMapImpl; | ||
import org.eclipse.fordiac.ide.hierarchymanager.model.hierarchy.HierarchyPackage; | ||
import org.eclipse.fordiac.ide.hierarchymanager.model.hierarchy.Leaf; | ||
import org.eclipse.fordiac.ide.hierarchymanager.model.hierarchy.RootLevel; | ||
import org.eclipse.fordiac.ide.hierarchymanager.model.hierarchy.util.HierarchyResourceFactoryImpl; | ||
import org.eclipse.fordiac.ide.hierarchymanager.ui.handlers.AbstractHierarchyHandler; | ||
import org.eclipse.fordiac.ide.hierarchymanager.ui.operations.AbstractChangeHierarchyOperation; | ||
import org.eclipse.fordiac.ide.hierarchymanager.ui.operations.UpdateLeafRefOperation; | ||
import org.eclipse.fordiac.ide.hierarchymanager.ui.util.HierarchyManagerUtil; | ||
import org.eclipse.fordiac.ide.hierarchymanager.ui.view.PlantHierarchyView; | ||
import org.eclipse.fordiac.ide.model.commands.QualNameChange; | ||
import org.eclipse.fordiac.ide.model.commands.QualNameChangeListener; | ||
import org.eclipse.fordiac.ide.model.libraryElement.INamedElement; | ||
import org.eclipse.fordiac.ide.model.libraryElement.UntypedSubApp; | ||
import org.eclipse.fordiac.ide.model.typelibrary.TypeEntry; | ||
import org.eclipse.ui.IWorkbenchPage; | ||
import org.eclipse.ui.PlatformUI; | ||
|
||
public class HierachyManagerUpdateListener extends QualNameChangeListener { | ||
|
||
private static EObject loadPlantHierachy(final IProject project) { | ||
final Map<String, Object> loadOptions = new HashMap<>(); | ||
final ResourceSet hierarchyResouceSet = new ResourceSetImpl(); | ||
hierarchyResouceSet.getResourceFactoryRegistry().getExtensionToFactoryMap() | ||
.put(PlantHierarchyView.PLANT_HIERARCHY_FILE_NAME_EXTENSION, new HierarchyResourceFactoryImpl()); | ||
loadOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); | ||
final XMLMapImpl map = new XMLMapImpl(); | ||
map.setNoNamespacePackage(HierarchyPackage.eINSTANCE); | ||
loadOptions.put(XMLResource.OPTION_XML_MAP, map); | ||
hierarchyResouceSet.getLoadOptions().put(XMLResource.OPTION_XML_MAP, map); | ||
return PlantHierarchyView.loadHierachyForProject(project, hierarchyResouceSet, loadOptions); | ||
} | ||
|
||
@Override | ||
public List<AbstractOperation> constructExecutableUndoOperations(final QualNameChange change, final Object o) { | ||
// TODO Auto-generated method stub | ||
return null; | ||
} | ||
|
||
@Override | ||
protected List<AbstractOperation> constructExecutableOperations(final QualNameChange qualNameChange, | ||
final Object rootLevel) { | ||
|
||
final String identifier = qualNameChange.oldQualName(); | ||
|
||
final List<AbstractOperation> result = new ArrayList<>(); | ||
|
||
final List<Leaf> leafs = HierarchyManagerUtil.searchLeaf((RootLevel) rootLevel, | ||
leafRef -> leafRef.contains(identifier)); | ||
if (leafs == null || leafs.isEmpty()) { | ||
return null; // leaf may have been deleted in the meantime | ||
} | ||
|
||
final String newRef = qualNameChange.newQualName(); | ||
|
||
for (final Leaf leaf : leafs) { | ||
result.add(new UpdateLeafRefOperation(leaf, newRef)); | ||
} | ||
|
||
return result; | ||
} | ||
|
||
@Override | ||
protected Object getReceiver(final TypeEntry key) { | ||
return getPlantHierachy(key); | ||
} | ||
|
||
@Override | ||
protected void executeOperation(final AbstractOperation op) { | ||
AbstractHierarchyHandler.executeOperation((AbstractChangeHierarchyOperation) op); | ||
} | ||
|
||
private static RootLevel getPlantHierachy(final TypeEntry key) { | ||
final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); | ||
if (page != null) { | ||
final PlantHierarchyView view = (PlantHierarchyView) page | ||
.findView("org.eclipse.fordiac.ide.hierarchymanager.view"); //$NON-NLS-1$ | ||
if (view != null) { | ||
return (RootLevel) view.getCommonViewer().getInput(); | ||
} | ||
} | ||
final IProject project = key.getFile().getProject(); | ||
return (RootLevel) loadPlantHierachy(project); | ||
} | ||
|
||
@Override | ||
protected boolean isEnabled(final INamedElement element) { | ||
return element instanceof UntypedSubApp; | ||
} | ||
|
||
} |
59 changes: 59 additions & 0 deletions
59
...ui/src/org/eclipse/fordiac/ide/hierarchymanager/ui/operations/UpdateLeafRefOperation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2024 Primetals Technology Austria GmbH | ||
* | ||
* This program and the accompanying materials are made available under the | ||
* terms of the Eclipse Public License 2.0 which is available at | ||
* http://www.eclipse.org/legal/epl-2.0. | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Michael Oberlehner - initial API and implementation and/or initial documentation | ||
*******************************************************************************/ | ||
package org.eclipse.fordiac.ide.hierarchymanager.ui.operations; | ||
|
||
import org.eclipse.core.commands.ExecutionException; | ||
import org.eclipse.core.runtime.IAdaptable; | ||
import org.eclipse.core.runtime.IProgressMonitor; | ||
import org.eclipse.core.runtime.IStatus; | ||
import org.eclipse.core.runtime.Status; | ||
import org.eclipse.fordiac.ide.hierarchymanager.model.hierarchy.Leaf; | ||
|
||
public class UpdateLeafRefOperation extends AbstractChangeHierarchyOperation { | ||
|
||
private final Leaf leaf; | ||
private final String newRef; | ||
private final String oldRef; | ||
|
||
public UpdateLeafRefOperation(final Leaf level, final String newRef) { | ||
super("Update Reference"); | ||
this.leaf = level; | ||
this.newRef = newRef; | ||
this.oldRef = leaf.getRef(); | ||
} | ||
|
||
@Override | ||
public IStatus execute(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException { | ||
final String replace = leaf.getRef().replace(oldRef, newRef); | ||
|
||
leaf.setRef(replace); | ||
|
||
saveHierarchy(leaf, monitor); | ||
return Status.OK_STATUS; | ||
} | ||
|
||
@Override | ||
public IStatus redo(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException { | ||
leaf.setRef(leaf.getRef().replace(oldRef, newRef)); | ||
saveHierarchy(leaf, monitor); | ||
return Status.OK_STATUS; | ||
} | ||
|
||
@Override | ||
public IStatus undo(final IProgressMonitor monitor, final IAdaptable info) throws ExecutionException { | ||
leaf.setRef(leaf.getRef().replace(newRef, oldRef)); | ||
saveHierarchy(leaf, monitor); | ||
return Status.OK_STATUS; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<?eclipse version="3.2"?> | ||
<plugin> | ||
<extension-point | ||
id="QualNameChangeListener" | ||
name="Full Qualified Name Change Listener" | ||
schema="schema/QualNameChangeListener.exsd"> | ||
</extension-point> | ||
</plugin> |
25 changes: 25 additions & 0 deletions
25
plugins/org.eclipse.fordiac.ide.model.commands/schema/QualNameChangeListener.exsd
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
<?xml version='1.0' encoding='UTF-8'?> | ||
<!-- Schema file written by PDE --> | ||
<schema targetNamespace="org.eclipse.fordiac.ide.model.commands" xmlns="http://www.w3.org/2001/XMLSchema"> | ||
<annotation> | ||
<appinfo> | ||
<meta.schema plugin="org.eclipse.fordiac.ide.model.commands" id="org.eclipse.fordiac.ide.model.commands.QualNameChangeListener" name="Extension point for listening on changes of the full qualified name of an org.eclipse.fordiac.ide.model.libraryElement.INamedElement"/> | ||
</appinfo> | ||
<documentation> | ||
|
||
</documentation> | ||
</annotation> | ||
|
||
<element name="listener"> | ||
<complexType> | ||
<attribute name="class" type="java:org.eclipse.core.runtime.IExecutableExtension" use="required"> | ||
<annotation> | ||
<documentation> | ||
|
||
</documentation> | ||
</annotation> | ||
</attribute> | ||
</complexType> | ||
</element> | ||
|
||
</schema> |
55 changes: 55 additions & 0 deletions
55
...de.model.commands/src/org/eclipse/fordiac/ide/model/commands/QualNameAffectedCommand.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2024 Primetals Technology Austria GmbH | ||
* | ||
* This program and the accompanying materials are made available under the | ||
* terms of the Eclipse Public License 2.0 which is available at | ||
* http://www.eclipse.org/legal/epl-2.0. | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
* | ||
* Contributors: | ||
* Michael Oberlehner - initial API and implementation and/or initial documentation | ||
*******************************************************************************/ | ||
package org.eclipse.fordiac.ide.model.commands; | ||
|
||
import org.eclipse.core.runtime.Assert; | ||
import org.eclipse.emf.ecore.EObject; | ||
import org.eclipse.emf.ecore.util.EcoreUtil; | ||
import org.eclipse.fordiac.ide.model.libraryElement.INamedElement; | ||
import org.eclipse.fordiac.ide.model.libraryElement.LibraryElement; | ||
import org.eclipse.fordiac.ide.model.typelibrary.TypeEntry; | ||
import org.eclipse.gef.commands.Command; | ||
|
||
public abstract class QualNameAffectedCommand extends Command implements ScopedCommand { | ||
|
||
private final String oldQualName; | ||
|
||
protected QualNameAffectedCommand(final String oldQualName) { | ||
this.oldQualName = oldQualName; | ||
} | ||
|
||
protected String getOldQualName() { | ||
return oldQualName; | ||
} | ||
|
||
protected abstract String getNewQualName(); | ||
|
||
protected abstract INamedElement getNotifier(); | ||
|
||
/** | ||
* encapsulate the change to not provide the command to the receiver | ||
*/ | ||
public QualNameChange getQualNameChange() { | ||
return new QualNameChange(getOldQualName(), getNewQualName(), getNotifier(), getTypeEntry(getNotifier())); | ||
} | ||
|
||
protected static TypeEntry getTypeEntry(final INamedElement notifier) { | ||
final EObject rootContainer = EcoreUtil.getRootContainer(notifier); | ||
Assert.isTrue(rootContainer instanceof LibraryElement); | ||
if (rootContainer instanceof final LibraryElement element) { | ||
return element.getTypeEntry(); | ||
} | ||
return null; | ||
} | ||
|
||
} |
Oops, something went wrong.