diff --git a/plugins/gradle/src/META-INF/plugin.xml b/plugins/gradle/src/META-INF/plugin.xml
index b6a5ec5aa1e0..177380050a79 100644
--- a/plugins/gradle/src/META-INF/plugin.xml
+++ b/plugins/gradle/src/META-INF/plugin.xml
@@ -61,6 +61,7 @@
+
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/conflict/GradleConflictControlFactory.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/conflict/GradleConflictControlFactory.java
index 746d19479961..9399f0eeca0c 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/conflict/GradleConflictControlFactory.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/conflict/GradleConflictControlFactory.java
@@ -30,12 +30,15 @@ import java.util.Collection;
* @since 3/2/12 3:03 PM
*/
public class GradleConflictControlFactory {
-
+
+ @NotNull private final GradleProjectConflictControlFactory myProjectFactory;
@NotNull private final GradleLibraryDependencyConflictControlFactory myLibraryDependencyFactory;
@NotNull private final GradleCommonDependencyConflictControlFactory myCommonDependencyFactory;
- public GradleConflictControlFactory(@NotNull GradleLibraryDependencyConflictControlFactory libraryFactory,
+ public GradleConflictControlFactory(@NotNull GradleProjectConflictControlFactory factory,
+ @NotNull GradleLibraryDependencyConflictControlFactory libraryFactory,
@NotNull GradleCommonDependencyConflictControlFactory commonDependencyFactory) {
+ myProjectFactory = factory;
myLibraryDependencyFactory = libraryFactory;
myCommonDependencyFactory = commonDependencyFactory;
}
@@ -54,6 +57,7 @@ public class GradleConflictControlFactory {
GradleUtil.dispatch(entity, new IntellijEntityVisitor() {
@Override
public void visit(@NotNull Project project) {
+ result.set(myProjectFactory.getControl(changes));
}
@Override
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/conflict/GradleProjectConflictControlFactory.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/conflict/GradleProjectConflictControlFactory.java
new file mode 100644
index 000000000000..822b27fcec3f
--- /dev/null
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/conflict/GradleProjectConflictControlFactory.java
@@ -0,0 +1,77 @@
+package org.jetbrains.plugins.gradle.sync.conflict;
+
+import com.intellij.openapi.util.Ref;
+import com.intellij.pom.java.LanguageLevel;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.plugins.gradle.diff.GradleProjectStructureChange;
+import org.jetbrains.plugins.gradle.diff.GradleProjectStructureChangeVisitor;
+import org.jetbrains.plugins.gradle.diff.GradleProjectStructureChangeVisitorAdapter;
+import org.jetbrains.plugins.gradle.diff.project.GradleLanguageLevelChange;
+import org.jetbrains.plugins.gradle.diff.project.GradleProjectRenameChange;
+import org.jetbrains.plugins.gradle.ui.MatrixControlBuilder;
+import org.jetbrains.plugins.gradle.util.GradleBundle;
+import org.jetbrains.plugins.gradle.util.GradleUtil;
+
+import javax.swing.*;
+import java.util.Collection;
+
+/**
+ * Thread-safe.
+ *
+ * @author Denis Zhdanov
+ * @since 3/15/12 4:26 PM
+ */
+public class GradleProjectConflictControlFactory {
+
+ @SuppressWarnings("MethodMayBeStatic")
+ @Nullable
+ public JComponent getControl(Collection changes) {
+ final Ref renameChangeRef = new Ref();
+ final Ref languageLevelChangeRef = new Ref();
+
+ GradleProjectStructureChangeVisitor visitor = new GradleProjectStructureChangeVisitorAdapter() {
+ @Override
+ public void visit(@NotNull GradleProjectRenameChange change) {
+ renameChangeRef.set(change);
+ }
+
+ @Override
+ public void visit(@NotNull GradleLanguageLevelChange change) {
+ languageLevelChangeRef.set(change);
+ }
+ };
+
+ for (GradleProjectStructureChange change : changes) {
+ if (renameChangeRef.get() != null && languageLevelChangeRef.get() != null) {
+ break;
+ }
+ change.invite(visitor);
+ }
+
+ final GradleProjectRenameChange renameChange = renameChangeRef.get();
+ final GradleLanguageLevelChange languageLevelChange = languageLevelChangeRef.get();
+ if (renameChange == null && languageLevelChange == null) {
+ return null;
+ }
+
+ MatrixControlBuilder builder = GradleUtil.getConflictChangeBuilder();
+ if (renameChange != null) {
+ builder.addRow(GradleBundle.message("gradle.import.structure.settings.label.name"),
+ renameChange.getGradleValue(), renameChange.getIntellijValue());
+ }
+
+ if (languageLevelChange != null) {
+ builder.addRow(GradleBundle.message("gradle.import.structure.settings.label.language.level"),
+ getTextToShow(languageLevelChange.getGradleValue()), getTextToShow(languageLevelChange.getIntellijValue()));
+ }
+
+ return builder.build();
+ }
+
+ @NotNull
+ private static String getTextToShow(@NotNull LanguageLevel level) {
+ final String s = level.toString();
+ return s.substring(s.indexOf('1')).replace('_', '.');
+ }
+}
diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/MatrixControlBuilder.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/MatrixControlBuilder.java
index abc73cc47962..b8581a6efa54 100644
--- a/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/MatrixControlBuilder.java
+++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/MatrixControlBuilder.java
@@ -7,6 +7,7 @@ import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.util.Arrays;
@@ -34,27 +35,36 @@ import java.util.Arrays;
public class MatrixControlBuilder {
private final DefaultTableModel myModel = new DefaultTableModel();
- private final JComponent result;
+
+ private final JBTable myTable;
+ private final JComponent myResult;
+ private final int[] myColumnWidths;
+ private final FontMetrics myFontMetrics;
public MatrixControlBuilder(@NotNull String ... columns) {
myModel.addColumn(""); // Row name
for (String column : columns) {
myModel.addColumn(column);
}
- final JBTable table = new JBTable(myModel) {
+ myTable = new JBTable(myModel) {
@Override
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
};
- table.setStriped(true);
+ myTable.setStriped(true);
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(SwingConstants.CENTER);
- for (int i = 1/* don't align row name */, max = table.getColumnCount(); i < max; i++) {
- table.getColumnModel().getColumn(i).setCellRenderer(renderer);
+ for (int i = 1/* don't align row name */, max = myTable.getColumnCount(); i < max; i++) {
+ myTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
+ }
+ myResult = ScrollPaneFactory.createScrollPane(myTable);
+
+ myColumnWidths = new int[columns.length + 1/*'name' column*/];
+ myFontMetrics = myTable.getFontMetrics(myTable.getFont());
+ for (int i = 0; i < columns.length; i++) {
+ myColumnWidths[i + 1] = myFontMetrics.stringWidth(columns[i]);
}
- //table.setDefaultRenderer(String.class, renderer);
- result = ScrollPaneFactory.createScrollPane(table);
}
/**
@@ -82,10 +92,18 @@ public class MatrixControlBuilder {
rowData[0] = name;
System.arraycopy(values, 0, rowData, 1, values.length);
myModel.addRow(rowData);
+
+ for (int i = 0; i < rowData.length; i++) {
+ myColumnWidths[i] = Math.max(myFontMetrics.stringWidth(rowData[i].toString()), myColumnWidths[i]);
+ }
}
@NotNull
public JComponent build() {
- return result;
+ final TableColumnModel columnModel = myTable.getColumnModel();
+ for (int i = 0; i < myColumnWidths.length; i++) {
+ columnModel.getColumn(i).setMinWidth(myColumnWidths[i] + 4);
+ }
+ return myResult;
}
}