package org.netbeans.gradle.project.newproject;
import java.awt.Component;
import java.io.File;
import java.util.concurrent.atomic.AtomicReference;
import javax.swing.event.ChangeListener;
import org.jtrim.utils.ExceptionHelper;
import org.netbeans.gradle.project.script.CommonScripts;
import org.netbeans.gradle.project.script.GroovyScripts;
import org.netbeans.gradle.project.validate.Problem;
import org.netbeans.gradle.project.validate.Validator;
import org.openide.WizardDescriptor;
import org.openide.util.HelpCtx;
public final class GradleSubProjectConfigPanel implements WizardDescriptor.Panel<WizardDescriptor> {
private static final String EXTENSION = GroovyScripts.EXTENSION;
private final AtomicReference<GradleSingleProjectPropertiesPanel> panel;
private final AtomicReference<GradleSingleProjectConfig> configRef;
private final WizardDescriptor wizard;
public GradleSubProjectConfigPanel(AtomicReference<GradleSingleProjectConfig> configRef, WizardDescriptor wizard) {
ExceptionHelper.checkNotNullArgument(configRef, "configRef");
this.configRef = configRef;
this.wizard = wizard;
this.panel = new AtomicReference<>();
}
private GradleSingleProjectPropertiesPanel getPanel() {
GradleSingleProjectPropertiesPanel result = panel.get();
if (result == null) {
GradleSingleProjectPropertiesPanel newPanel
= new GradleSingleProjectPropertiesPanel(wizard);
if (panel.compareAndSet(null, newPanel)) {
newPanel.addProjectLocationValidator(new Validator<String>() {
private Problem checkFile(File projectDir, String fileName) {
if (!new File(projectDir, fileName).isFile()) {
return Problem.severe(NewProjectStrings.getNotRootProject());
}
return null;
}
@Override
public Problem validateInput(String inputType) {
File rootProject = new File(inputType);
Problem problemRootBuild = checkFile(rootProject, CommonScripts.BUILD_BASE_NAME + EXTENSION);
if (problemRootBuild != null) {
return problemRootBuild;
}
Problem problemRootSettings = checkFile(rootProject, CommonScripts.SETTINGS_BASE_NAME + EXTENSION);
if (problemRootSettings != null) {
return problemRootSettings;
}
Problem problemOldFormat = checkFile(rootProject, "parent.gradle");
Problem problemNewFromat = checkFile(rootProject, "common.gradle");
if (problemNewFromat != null && problemOldFormat != null) {
return problemNewFromat;
}
if (problemOldFormat == null && problemNewFromat == null) {
// Cannot determine which format.
return problemNewFromat;
}
return null;
}
});
}
result = panel.get();
}
return result;
}
@Override
public Component getComponent() {
return getPanel();
}
@Override
public HelpCtx getHelp() {
return null;
}
@Override
public void readSettings(WizardDescriptor settings) {
getPanel().startValidation();
}
@Override
public void storeSettings(WizardDescriptor settings) {
configRef.set(getPanel().getConfig());
}
@Override
public boolean isValid() {
return getPanel().containsValidData();
}
@Override
public void addChangeListener(ChangeListener listener) {
getPanel().addChangeListener(listener);
}
@Override
public void removeChangeListener(ChangeListener listener) {
getPanel().removeChangeListener(listener);
}
}