blob: bac337c2ea2a77bd3510da38695aeb747303c794 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*/
package org.netbeans.modules.maven.graph;
import org.netbeans.modules.java.graph.GraphEdge;
import org.netbeans.modules.java.graph.GraphNode;
import org.netbeans.modules.java.graph.DependencyGraphScene;
import java.awt.event.ActionEvent;
import java.util.Collection;
import java.util.logging.Logger;
import static javax.swing.Action.NAME;
import org.netbeans.api.project.Project;
import org.netbeans.modules.maven.api.ModelUtils;
import static org.netbeans.modules.maven.graph.Bundle.TIT_FixConflict;
import org.netbeans.modules.maven.model.pom.Dependency;
import org.netbeans.modules.maven.model.pom.POMModel;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.util.NbBundle;
/**
*
* @author tomas
*/
public class FixVersionConflictAction extends MavenAction {
FixVersionConflictAction(DependencyGraphTopComponent ownerTC, DependencyGraphScene scene, GraphNode<MavenDependencyNode> rootNode, GraphNode<MavenDependencyNode> node, POMModel model, Project project) {
super(ownerTC, scene, rootNode, node, model, project);
putValue(NAME, TIT_FixConflict());
}
@NbBundle.Messages("TIT_FixConflict=Fix Version Conflict...")
@Override public void actionPerformed(ActionEvent e) {
FixVersionConflictPanel fixPanel = new FixVersionConflictPanel(scene, node);
DialogDescriptor dd = new DialogDescriptor(fixPanel, TIT_FixConflict());
//pnl.setStatusDisplayer(dd.createNotificationLineSupport());
Object ret = DialogDisplayer.getDefault().notify(dd);
if (ret == DialogDescriptor.OK_OPTION) {
FixVersionConflictPanel.FixDescription res = fixPanel.getResult();
fixDependency(res);
updateGraph(res);
save();
}
}
private void fixDependency(FixVersionConflictPanel.FixDescription fixContent) {
if (!model.startTransaction()) {
return;
}
if (model.getProject() == null) {
Logger.getLogger(FixVersionConflictAction.class.getName()).warning("#238748 we got a graph, but the model turned invalid for some reason. if you have steps to reproduce, please reopen the issue.");
return; //#238748 not clear under which circumstances we get a graph but invalid model
}
try {
if (fixContent.isSet && fixContent.version2Set != null) {
Dependency dep = ModelUtils.checkModelDependency(model, nodeArtif.getGroupId(), nodeArtif.getArtifactId(), true);
dep.setVersion(fixContent.version2Set.toString());
}
if (fixContent.isExclude) {
excludeDepFromModel(node.getImpl(), fixContent.exclusionTargets);
}
} finally {
model.endTransaction();
}
}
private void updateGraph(FixVersionConflictPanel.FixDescription fixContent) {
if (fixContent.isSet) {
node.getImpl().getArtifact().setVersion(fixContent.version2Set.toString());
Collection<GraphEdge<MavenDependencyNode>> incoming = scene.findNodeEdges(node, false, true);
for (GraphEdge age : incoming) {
scene.notifyModelChanged(age);
}
scene.notifyModelChanged(node);
// add edge representing direct dependency if not exist yet
if (scene.findEdgesBetween(rootNode, node).isEmpty()) {
GraphEdge ed = scene.addEdge(rootNode.getImpl(), node.getImpl());
ed.setPrimaryPath(true);
scene.setEdgeTarget(ed, node);
scene.setEdgeSource(ed, rootNode);
node.setPrimaryLevel(1);
node.setParent(rootNode.getImpl());
rootNode.getImpl().addChild(node.getImpl());
scene.validate();
}
}
if (fixContent.isExclude) {
updateGraphAfterExclusion(node, fixContent.exclusionTargets, fixContent.conflictParents);
}
}
}