/
AddLibraryDependencyChange.java
55 lines (50 loc) · 2.19 KB
/
AddLibraryDependencyChange.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*******************************************************************************
* Copyright (c) 2024 Primetals Technologies 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:
* Patrick Aigner
* - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.fordiac.ide.typemanagement.refactoring;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.fordiac.ide.library.model.library.Manifest;
import org.eclipse.fordiac.ide.library.model.library.Required;
import org.eclipse.fordiac.ide.library.model.util.ManifestHelper;
import org.eclipse.fordiac.ide.typemanagement.Messages;
import org.eclipse.fordiac.ide.typemanagement.refactoring.IFordiacPreviewChange.ChangeState;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.CompositeChange;
public class AddLibraryDependencyChange extends CompositeChange {
private final IProject project;
private final Required dependency;
public AddLibraryDependencyChange(final IProject project, final Required dependency) {
super(Messages.AddLibraryDependency_Change_Title);
this.project = project;
this.dependency = dependency;
}
@Override
public Change perform(final IProgressMonitor pm) throws CoreException {
final Manifest projectManifest = ManifestHelper.getContainerManifest(project);
if (projectManifest == null || projectManifest.getDependencies() == null) {
return null;
}
if (dependency != null && ManifestHelper.addDependency(projectManifest, dependency)
&& ManifestHelper.saveManifest(projectManifest)) {
final DeleteLibraryDependencyChange change = new DeleteLibraryDependencyChange(project,
dependency.getSymbolicName());
final ChangeState cs = ChangeState.DELETE;
change.addState(cs);
change.getState().removeIf(state -> !state.equals(cs));
return change;
}
return null;
}
}