package org.objectstyle.wolips.jdt;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Platform;
import org.objectstyle.woenvironment.frameworks.Version;
import org.objectstyle.wolips.core.resources.types.project.ProjectAdapter;
import org.objectstyle.wolips.jdt.classpath.model.IEclipseFramework;
import org.objectstyle.wolips.variables.BuildProperties;
import org.objectstyle.wolips.variables.IBuildPropertiesInitializer;
import org.objectstyle.wolips.variables.VariablesPlugin;
public class WOBuildPropertiesInitializer implements IBuildPropertiesInitializer {
public void initializeDefaults(BuildProperties buildProperties) {
IProject project = buildProperties.getProject();
if (!project.isAccessible()) {
return;
}
try {
ProjectFrameworkAdapter projectFrameworkAdaptor = (ProjectFrameworkAdapter) project.getAdapter(ProjectFrameworkAdapter.class);
if (projectFrameworkAdaptor != null) {
IEclipseFramework foundationFramework;
// ... If you have the JavaFoundation source framework and you're actually talking to it right now, well .. we have
// to special case that one. If a JavaFoundation framework falls in the forest, does it make a sound?
if ("JavaFoundation".equals(project.getName())) {
foundationFramework = JdtPlugin.getDefault().getFrameworkModel(project).getFrameworkWithName("JavaFoundation");
}
else {
foundationFramework = projectFrameworkAdaptor.getLinkedFrameworkNamed("JavaFoundation");
}
if (foundationFramework != null) {
Version version = foundationFramework.getVersion();
if (version != null && !version.isUndefined()) {
buildProperties.setWOVersionDefault(version);
}
}
boolean wellFormedTemplateRequiredDefault;
if (projectFrameworkAdaptor.isLinkedToFrameworkNamed("WOOgnl")) {
buildProperties.setInlineBindingPrefixDefault("$");
buildProperties.setInlineBindingSuffixDefault("");
wellFormedTemplateRequiredDefault = false;
} else if (buildProperties.getWOVersion().isAtLeastVersion(5, 4)) {
buildProperties.setInlineBindingPrefixDefault("[");
buildProperties.setInlineBindingSuffixDefault("]");
wellFormedTemplateRequiredDefault = true;
} else {
buildProperties.setInlineBindingPrefixDefault("[");
buildProperties.setInlineBindingSuffixDefault("]");
wellFormedTemplateRequiredDefault = false;
}
String globalWellFormedTemplateRequiredDefault = Platform.getPreferencesService().getString("org.objectstyle.wolips.bindings", "WellFormedTemplate", null, null);
if ("yes".equals(globalWellFormedTemplateRequiredDefault)) {
wellFormedTemplateRequiredDefault = true;
}
else if ("no".equals(globalWellFormedTemplateRequiredDefault)) {
wellFormedTemplateRequiredDefault = false;
}
buildProperties.setWellFormedTemplateRequiredDefault(VariablesPlugin.getDefault().getGlobalVariables().getBoolean("component.wellFormedTemplateRequired", wellFormedTemplateRequiredDefault));
IEclipseFramework framework = projectFrameworkAdaptor.getFramework();
if (framework != null) {
buildProperties.setVersionDefault(framework.getVersion());
}
}
} catch (Throwable e) {
e.printStackTrace(System.out);
}
}
public void initialize(BuildProperties buildProperties) {
IProject project = buildProperties.getProject();
if (!project.isAccessible()) {
return;
}
String buildPropertiesVersionStr = VariablesPlugin.getDefault().getProjectVariables(project).getString("wolips.buildPropertiesVersion");
int buildPropertiesVersion = buildPropertiesVersionStr == null ? Integer.MAX_VALUE : Integer.parseInt(buildPropertiesVersionStr);
// MS: if wolips.buildPropertiesVersion is 0, then don't rename framework.name to project.name
if (!buildProperties.hasValidProjectType() && buildPropertiesVersion > 0) {
ProjectAdapter projectAdapter = (ProjectAdapter) project.getAdapter(ProjectAdapter.class);
boolean framework = false;
if (projectAdapter != null) {
framework = projectAdapter.isFramework();
}
buildProperties.setFramework(framework);
String projectName = buildProperties.getName();
if (framework) {
if (projectName == null) {
String frameworkName = buildProperties.get("framework.name");
if (frameworkName == null) {
buildProperties.setName(project.getName());
} else {
buildProperties.setName(frameworkName);
}
} else {
// reset it so we update the dependent properties
buildProperties.setName(projectName);
}
buildProperties.remove("framework.name");
} else {
if (projectName == null) {
buildProperties.setName(project.getName());
} else {
// reset it so we update the dependent properties
buildProperties.setName(projectName);
}
}
}
}
}