net.officefloor.eclipse.wizard.template.HttpTemplateExtensionSourceInstance Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of net.officefloor.woof Show documentation
Show all versions of net.officefloor.woof Show documentation
OfficeFloor WoOF Eclipse plug-in
/*
* OfficeFloor - http://www.officefloor.net
* Copyright (C) 2005-2013 Daniel Sagenschneider
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
package net.officefloor.eclipse.wizard.template;
import net.officefloor.compile.impl.properties.PropertyListSourceProperties;
import net.officefloor.compile.issues.CompilerIssues;
import net.officefloor.compile.properties.PropertyList;
import net.officefloor.eclipse.classpath.ProjectClassLoader;
import net.officefloor.eclipse.common.dialog.input.InputAdapter;
import net.officefloor.eclipse.common.dialog.input.InputHandler;
import net.officefloor.eclipse.common.dialog.input.impl.PropertyListInput;
import net.officefloor.eclipse.extension.template.WoofTemplateExtensionSourceExtension;
import net.officefloor.eclipse.extension.template.WoofTemplateExtensionSourceExtensionContext;
import net.officefloor.eclipse.repository.project.ProjectConfigurationContext;
import net.officefloor.eclipse.util.EclipseUtil;
import net.officefloor.frame.impl.construct.source.SourceContextImpl;
import net.officefloor.frame.spi.source.ResourceSource;
import net.officefloor.frame.spi.source.SourceContext;
import net.officefloor.frame.spi.source.SourceProperties;
import net.officefloor.model.change.Change;
import net.officefloor.model.change.Conflict;
import net.officefloor.model.repository.ConfigurationContext;
import net.officefloor.model.woof.WoofChangeIssues;
import net.officefloor.plugin.woof.template.WoofTemplateExtensionLoader;
import net.officefloor.plugin.woof.template.WoofTemplateExtensionLoaderImpl;
import net.officefloor.plugin.woof.template.WoofTemplateExtensionSource;
import org.eclipse.core.resources.IProject;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
/**
* Instance of the {@link WoofTemplateExtensionSource}.
*
* @author Daniel Sagenschneider
*/
public class HttpTemplateExtensionSourceInstance {
/**
* Obtains the label from the {@link WoofTemplateExtensionSource} class
* name.
*
* @param woofTemplateExtensionSourceClassName
* Class name of the {@link WoofTemplateExtensionSource}.
* @return Label.
*/
public static String getLabelFromWoofTemplateExtensionClassName(
String woofTemplateExtensionSourceClassName) {
String label = woofTemplateExtensionSourceClassName;
int index = label.lastIndexOf('.');
if (index > 0) {
// Strip off package name
label = label.substring(index + ".".length());
}
label = label.replace(
WoofTemplateExtensionSource.class.getSimpleName(), "");
return label;
}
/**
* Class name of the {@link WoofTemplateExtensionSource}.
*/
private final String woofTemplateExtensionSourceClassName;
/**
* {@link WoofTemplateExtensionSourceExtension} for the
* {@link WoofTemplateExtensionSource}.
*/
private final WoofTemplateExtensionSourceExtension> extension;
/**
* {@link IProject}.
*/
private final IProject project;
/**
* Initiate.
*
* @param woofTemplateExtensionSourceClassName
* {@link WoofTemplateExtensionSource} class name.
* @param extension
* {@link WoofTemplateExtensionSourceExtension}. May be
* null.
* @param project
* {@link IProject}.
*/
public HttpTemplateExtensionSourceInstance(
String woofTemplateExtensionSourceClassName,
WoofTemplateExtensionSourceExtension> extension, IProject project) {
this.woofTemplateExtensionSourceClassName = woofTemplateExtensionSourceClassName;
this.extension = extension;
this.project = project;
}
/**
* Obtains the {@link WoofTemplateExtensionSource} class name.
*
* @return {@link WoofTemplateExtensionSource} class name.
*/
public String getWoofTemplateExtensionSourceClassName() {
return this.woofTemplateExtensionSourceClassName;
}
/**
* Obtains the {@link WoofTemplateExtensionSource} label.
*
* @return {@link WoofTemplateExtensionSource} label.
*/
public String getWoofTemplateExtensionLabel() {
// Determine if have extension label
if (this.extension != null) {
String label = this.extension.getWoofTemplateExtensionSourceLabel();
if (!(EclipseUtil.isBlank(label))) {
return label;
}
}
// No extension label, so determine label from class name
return getLabelFromWoofTemplateExtensionClassName(this.woofTemplateExtensionSourceClassName);
}
/**
* Creates the {@link PropertyList} for the specification.
*
* @param issues
* {@link CompilerIssues} to report issues.
* @return {@link PropertyList} for the specification.
*/
public PropertyList createSpecification(CompilerIssues issues) {
// Create the class loader
ClassLoader classLoader = ProjectClassLoader.create(this.project,
Thread.currentThread().getContextClassLoader());
// Load the specification
WoofTemplateExtensionLoader loader = new WoofTemplateExtensionLoaderImpl();
PropertyList properties = loader.loadSpecification(
this.woofTemplateExtensionSourceClassName, classLoader, issues);
// Return the specification
return properties;
}
/**
* Creates the {@link Control} instances for the populating the
* {@link PropertyList} for the {@link WoofTemplateExtensionSource}.
*
* @param page
* {@link Composite} to add {@link Control} instances.
* @param context
* {@link WoofTemplateExtensionSourceExtensionContext}.
*/
public void createControl(Composite page,
final WoofTemplateExtensionSourceExtensionContext context) {
// Determine if have extension
if (this.extension != null) {
// Load configuration via extension
this.extension.createControl(page, context);
} else {
// Provide default editing of the extension properties
page.setLayout(new GridLayout());
PropertyListInput input = new PropertyListInput(
context.getPropertyList());
new InputHandler(page, input, new InputAdapter() {
@Override
public void notifyValueChanged(Object value) {
context.notifyPropertiesChanged();
}
});
}
}
/**
* Validate the change to configuration for the
* {@link WoofTemplateExtensionSource}.
*
* @param oldUri
* Old URI.
* @param oldProperties
* Old {@link PropertyList}.
* @param newUri
* New URI.
* @param newProperties
* New {@link PropertyList}.
* @param resourceSources
* {@link ResourceSource} instances.
* @param issues
* {@link CompilerIssues}.
*/
public void validateChange(String oldUri, PropertyList oldProperties,
String newUri, PropertyList newProperties,
ResourceSource[] resourceSources, final CompilerIssues issues) {
// Create the configuration context
ConfigurationContext configurationContext = new ProjectConfigurationContext(
this.project);
// Create the class loader
ClassLoader classLoader = ProjectClassLoader.create(this.project,
Thread.currentThread().getContextClassLoader());
// Create the source context
SourceContext sourceContext = new SourceContextImpl(true, classLoader,
resourceSources);
// Create the property lists
SourceProperties oldSourceProperties = null;
if (oldProperties != null) {
oldSourceProperties = new PropertyListSourceProperties(
oldProperties);
}
SourceProperties newSourceProperties = null;
if (newProperties != null) {
newSourceProperties = new PropertyListSourceProperties(
newProperties);
}
// Report issues to compiler
WoofChangeIssues changeIssues = new WoofChangeIssues() {
@Override
public void addIssue(String message, Throwable cause) {
issues.addIssue(null, null, null, null, message, cause);
}
@Override
public void addIssue(String message) {
issues.addIssue(null, null, null, null, message);
}
};
// Load the possible change
WoofTemplateExtensionLoader loader = new WoofTemplateExtensionLoaderImpl();
Change> change = loader.refactorTemplateExtension(
this.woofTemplateExtensionSourceClassName, oldUri,
oldSourceProperties, newUri, newSourceProperties,
configurationContext, sourceContext, changeIssues);
// Determine if issue
if (change != null) {
// Report the conflict
Conflict[] conflicts = change.getConflicts();
if ((conflicts != null) && (conflicts.length > 0)) {
// Report the first conflict
issues.addIssue(null, null, null, null,
conflicts[0].getConflictDescription());
}
}
}
} © 2015 - 2025 Weber Informatics LLC | Privacy Policy