/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo 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.
*
* OpenFlexo 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 OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.foundation.cg.templates;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import org.openflexo.foundation.Inspectors;
import org.openflexo.foundation.TargetType;
import org.openflexo.foundation.cg.utils.TemplateRepositoryType;
import org.openflexo.foundation.rm.CustomTemplatesResource;
import org.openflexo.foundation.rm.FlexoProject;
import org.openflexo.localization.FlexoLocalization;
public abstract class CGTemplates extends CGTemplateObject {
protected CGTemplateRepository _applicationRepository;
private Hashtable<CustomTemplatesResource, CustomCGTemplateRepository> _customRepositories;
private FlexoProject _project;
private Vector<TargetType> availableTargets;
@Override
public FlexoProject getProject() {
return _project;
}
public CGTemplates(FlexoProject project, Vector<TargetType> availableTargets) {
super();
this.availableTargets = availableTargets;
_project = project;
_customRepositories = new Hashtable<CustomTemplatesResource, CustomCGTemplateRepository>();
}
public CustomCGTemplateRepository createNewCustomTemplatesRepository(CustomTemplatesResource resource) {
return new CustomCGTemplateRepository(this, resource, availableTargets);
}
@Override
public void update() {
boolean hasChanged = false;
Vector<CustomTemplatesResource> previousKnownResources = new Vector<CustomTemplatesResource>(_customRepositories.keySet());
for (CustomTemplatesResource resource : getProject().getCustomTemplatesResources()) {
if (_customRepositories.get(resource) == null) {
if (resource.getFile() != null && resource.getFile().exists() && resource.getFile().isDirectory()) {
_customRepositories.put(resource, createNewCustomTemplatesRepository(resource));
hasChanged = true;
} else {
resource.delete();
continue;
}
}
if (previousKnownResources.contains(resource)) {
previousKnownResources.remove(resource);
}
}
for (CustomTemplatesResource resource : previousKnownResources) {
_customRepositories.remove(resource);
hasChanged = true;
}
_applicationRepository.update();
for (CustomCGTemplateRepository repository : _customRepositories.values()) {
repository.update();
}
if (hasChanged) {
setChanged();
notifyObservers(new TemplatesChanged());
}
}
@Override
public String getFullyQualifiedName() {
return "TEMPLATES";
}
@Override
public String getClassNameKey() {
return "templates";
}
public CGTemplateRepository getApplicationRepository() {
return _applicationRepository;
}
public Enumeration<CustomCGTemplateRepository> getCustomRepositories() {
return _customRepositories.elements();
}
public Vector<CustomCGTemplateRepository> getCustomCodeRepositoriesVector() {
Vector<CustomCGTemplateRepository> v = new Vector<CustomCGTemplateRepository>();
Enumeration<CustomCGTemplateRepository> en = getCustomRepositories();
while (en.hasMoreElements()) {
CustomCGTemplateRepository rep = en.nextElement();
if (rep.getRepositoryType() == TemplateRepositoryType.Code) {
v.add(rep);
}
}
return v;
}
public Vector<CustomCGTemplateRepository> getCustomDocRepositoriesVector() {
Vector<CustomCGTemplateRepository> v = new Vector<CustomCGTemplateRepository>();
Enumeration<CustomCGTemplateRepository> en = getCustomRepositories();
while (en.hasMoreElements()) {
CustomCGTemplateRepository rep = en.nextElement();
if (rep.getRepositoryType() == TemplateRepositoryType.Documentation) {
v.add(rep);
}
}
return v;
}
public CustomCGTemplateRepository getCustomCGTemplateRepositoryForName(String aName) {
if (aName == null) {
return null;
}
for (CustomCGTemplateRepository repository : _customRepositories.values()) {
if (repository.getName().equals(aName)) {
return repository;
}
}
return null;
}
public CustomCGTemplateRepository getCustomCGTemplateRepository(CustomTemplatesResource resource) {
return _customRepositories.get(resource);
}
@Override
public CGTemplates getTemplates() {
return this;
}
/**
* @param selectedDMPackage
* @return
*/
public String getNextGeneratedCodeRepositoryName() {
String baseName = FlexoLocalization.localizedForKey("default_custom_template_repository_name");
String testMe = baseName;
int test = 0;
while (getCustomCGTemplateRepositoryForName(testMe) != null) {
test++;
testMe = baseName + test;
}
return testMe;
}
@Override
public String getInspectorName() {
return Inspectors.GENERATORS.CG_TEMPLATES;
}
@Override
public String getHelpText() {
return FlexoLocalization.localizedForKey("contains_templates_used_for_code_generation");
}
}