Skip to content

Commit

Permalink
Implemented Reconnected PinChange
Browse files Browse the repository at this point in the history
  • Loading branch information
oberlehner authored and azoitl committed May 8, 2024
1 parent d0def0c commit 2135f9d
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 31 deletions.
2 changes: 1 addition & 1 deletion plugins/org.eclipse.fordiac.ide.typemanagement/plugin.xml
Expand Up @@ -740,7 +740,7 @@
<instanceof value="org.eclipse.fordiac.ide.typemanagement.refactoring.SafeStructDeletionChange$DeleteMemberVariableChange"/>
<instanceof value="org.eclipse.fordiac.ide.typemanagement.refactoring.SafeFBTypeDeletionChange$DeleteInternalFBChange"/>
<instanceof value="org.eclipse.fordiac.ide.typemanagement.refactoring.DeleteLibraryDependencyChange"/>
<instanceof value="org.eclipse.fordiac.ide.typemanagement.refactoring.RenameElementChange"/>
<instanceof value="org.eclipse.fordiac.ide.typemanagement.refactoring.ReconnectPinChange"/>
</or>
</enablement>
</changePreviewViewer>
Expand Down
@@ -1,37 +1,131 @@
package org.eclipse.fordiac.ide.typemanagement.refactoring;

import java.util.EnumSet;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.fordiac.ide.model.commands.change.ReconnectDataConnectionCommand;
import org.eclipse.fordiac.ide.model.libraryElement.Connection;
import org.eclipse.fordiac.ide.model.libraryElement.DataConnection;
import org.eclipse.fordiac.ide.model.libraryElement.ErrorMarkerInterface;
import org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement;
import org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement;
import org.eclipse.fordiac.ide.typemanagement.refactoring.IFordiacPreviewChange.ChangeState;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.commands.CompoundCommand;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;

public class ReconnectPinChange extends AbstractCommandChange<FBNetworkElement> {
public class ReconnectPinChange extends AbstractCommandChange<FBNetworkElement> implements IFordiacPreviewChange {

private final EnumSet<ChangeState> state = EnumSet.noneOf(ChangeState.class);
private final String newName;
private final String oldName;
private final FBNetworkElement instance;

protected ReconnectPinChange(final URI elementURI, final Class<FBNetworkElement> elementClass) {
protected ReconnectPinChange(final URI elementURI, final Class<FBNetworkElement> elementClass, final String newName,
final String oldName, final FBNetworkElement fbNeworkElement) {
super(elementURI, elementClass);
// TODO Auto-generated constructor stub
this.newName = newName;
this.oldName = oldName;
this.instance = fbNeworkElement;
}

@Override
public void initializeValidationData(final FBNetworkElement element, final IProgressMonitor pm) {
// TODO Auto-generated method stub

}

@Override
public RefactoringStatus isValid(final FBNetworkElement element, final IProgressMonitor pm)
throws CoreException, OperationCanceledException {
// TODO Auto-generated method stub

return null;
}

@Override
protected Command createCommand(final FBNetworkElement element) {
// TODO Auto-generated method stub
return null;

return new ReconnectPinByName(oldName, newName, element, ChangeState.Reconnect);

}

@Override
public EnumSet<ChangeState> getState() {
return state;
}

@Override
public EnumSet<ChangeState> getAllowedChoices() {
return EnumSet.of(ChangeState.Reconnect, ChangeState.NO_CHANGE, ChangeState.DELETE);
}

@Override
public void addState(final ChangeState newState) {
state.add(newState);
}

@Override
public EnumSet<ChangeState> getDefaultSelection() {
return EnumSet.of(ChangeState.Reconnect);
}

}

class ReconnectPinByName extends Command {

final String oldName;
final String newName;
final FBNetworkElement element;
private final ChangeState state;

public ReconnectPinByName(final String oldName, final String newName, final FBNetworkElement fbNeworkElement,
final ChangeState state) {
this.oldName = oldName;
this.newName = newName;
this.element = fbNeworkElement;
this.state = state;
}

@Override
public boolean canExecute() {

return state.equals(ChangeState.Reconnect);
}

@Override
public void execute() {
System.out.println(element);
final IInterfaceElement interfaceElement = element.getInterfaceElement(newName);
System.out.println("new" + interfaceElement);
final IInterfaceElement oldinterfaceElement = element.getInterfaceElement(oldName);

if (oldinterfaceElement instanceof final ErrorMarkerInterface errorMarkerInterface) {
final EList<Connection> inputConnections = getConnection(errorMarkerInterface);
final Class<? extends EList> class1 = inputConnections.getClass();

final CompoundCommand cmds = new CompoundCommand();
for (final Connection c : inputConnections) {

if (c instanceof final DataConnection dc) {
final ReconnectDataConnectionCommand cmd = new ReconnectDataConnectionCommand(dc,
!errorMarkerInterface.isIsInput(), interfaceElement, element.getFbNetwork());
cmds.add(cmd);
}

}

cmds.execute();
}

// System.out.println("old" + oldinterfaceElement);
}

private EList<Connection> getConnection(final ErrorMarkerInterface errorMarkerInterface) {
return errorMarkerInterface.isIsInput() ? errorMarkerInterface.getInputConnections()
: errorMarkerInterface.getOutputConnections();
}

}
Expand Up @@ -12,7 +12,6 @@
*******************************************************************************/
package org.eclipse.fordiac.ide.typemanagement.refactoring;

import java.util.EnumSet;
import java.util.Objects;

import org.eclipse.core.runtime.CoreException;
Expand All @@ -26,11 +25,10 @@
import org.eclipse.gef.commands.Command;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;

public class RenameElementChange extends AbstractCommandChange<INamedElement> implements IFordiacPreviewChange {
public class RenameElementChange extends AbstractCommandChange<INamedElement> {

private final String newName;
private String oldName;
private final EnumSet<ChangeState> state = EnumSet.noneOf(ChangeState.class);

public RenameElementChange(final String name, final URI elementURI, final String newName) {
super(name, elementURI, INamedElement.class);
Expand Down Expand Up @@ -59,23 +57,4 @@ public RefactoringStatus isValid(final INamedElement element, final IProgressMon
return status;
}

@Override
public EnumSet<ChangeState> getState() {
return state;
}

@Override
public EnumSet<ChangeState> getAllowedChoices() {
return EnumSet.of(ChangeState.Reconnect, ChangeState.NO_CHANGE, ChangeState.DELETE);
}

@Override
public void addState(final ChangeState newState) {
state.add(newState);
}

@Override
public EnumSet<ChangeState> getDefaultSelection() {
return EnumSet.of(ChangeState.Reconnect);
}
}
Expand Up @@ -52,6 +52,7 @@ public RefactoringStatus checkConditions(final IProgressMonitor pm, final CheckC
throws OperationCanceledException {
final RefactoringStatus status = new RefactoringStatus();
IdentifierVerifier.verifyIdentifier(getArguments().getNewName()).ifPresent(status::addFatalError);
System.out.println(status);
return status;
}

Expand Down
Expand Up @@ -20,7 +20,10 @@
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.fordiac.ide.model.IdentifierVerifier;
import org.eclipse.fordiac.ide.model.libraryElement.FBNetworkElement;
import org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement;
import org.eclipse.fordiac.ide.model.libraryElement.VarDeclaration;
import org.eclipse.fordiac.ide.model.search.types.BlockTypeInstanceSearch;
import org.eclipse.fordiac.ide.model.typelibrary.TypeEntry;
Expand Down Expand Up @@ -64,7 +67,8 @@ public RefactoringStatus checkFinalConditions(final IProgressMonitor pm, final C
@Override
public Change createChange(final IProgressMonitor pm) throws CoreException, OperationCanceledException {
final CompositeChange change = new CompositeChange(getProcessorName());
change.add(new RenameElementChange(elementURI.lastSegment(), elementURI, newName));
final RenameElementChange change2 = new RenameElementChange(elementURI.lastSegment(), elementURI, newName);
change.add(change2);
createChildChanges(change);
return change;
}
Expand All @@ -74,12 +78,30 @@ private void createChildChanges(final CompositeChange change) {
final BlockTypeInstanceSearch search = new BlockTypeInstanceSearch(typeEntry);
final List<? extends EObject> result = search.performSearch();

for (final EObject eObject : result) {

}

final var obj = getChildByURI(typeEntry.getType(), elementURI);
String oldName = "";
if (obj instanceof final VarDeclaration varDecl) {
oldName = varDecl.getName();
}

for (final EObject eObject : result) {

if (eObject instanceof final FBNetworkElement fbNeworkElement) {
// System.out.println(fbNeworkElement);
final IInterfaceElement interfaceElement = fbNeworkElement.getInterfaceElement(newName);
// System.out.println(interfaceElement);

final ReconnectPinChange c = new ReconnectPinChange(EcoreUtil.getURI(eObject), FBNetworkElement.class,
newName, oldName, fbNeworkElement);
change.add(c);
}

}

}

public EObject getChildByURI(final EObject parent, final URI uri) {
Expand Down

0 comments on commit 2135f9d

Please sign in to comment.