/*
* (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.version;
import java.io.File;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Vector;
import java.util.logging.Logger;
import org.openflexo.foundation.Inspectors;
import org.openflexo.foundation.cg.CGFile;
import org.openflexo.foundation.cg.dm.CGFileReleaseCleaned;
import org.openflexo.localization.FlexoLocalization;
import org.openflexo.toolbox.FileUtils;
public class CGFileReleaseVersion extends AbstractCGFileVersion {
private static final Logger logger = Logger.getLogger(CGFileReleaseVersion.class.getPackage().getName());
private Vector<CGFileIntermediateVersion> _intermediateVersions;
private CGRelease _release;
private boolean _needsSorting = true;
/**
* Default constructor
*/
public CGFileReleaseVersion(CGFile cgFile, CGRelease release, File file) {
super(cgFile, release != null ? release.getVersionIdentifier() : CGVersionIdentifier.DEFAULT_VERSION_ID(), file);
_release = release;
_intermediateVersions = new Vector<CGFileIntermediateVersion>();
}
@Override
public String getClassNameKey() {
return "file_release_version";
}
@Override
public String getInspectorName() {
return Inspectors.GENERATORS.FILE_RELEASE_VERSION_INSPECTOR;
}
public Vector<CGFileIntermediateVersion> getIntermediateVersions() {
if (_needsSorting) {
Collections.sort(_intermediateVersions, new Comparator<CGFileIntermediateVersion>() {
@Override
public int compare(CGFileIntermediateVersion o1, CGFileIntermediateVersion o2) {
return CGVersionIdentifier.COMPARATOR.compare(o1.getVersionId(), o2.getVersionId());
}
});
_needsSorting = false;
}
return _intermediateVersions;
}
public void setIntermediateVersions(Vector<CGFileIntermediateVersion> intermediateVersions) {
_intermediateVersions = intermediateVersions;
_needsSorting = true;
}
public void addToIntermediateVersions(CGFileIntermediateVersion intermediateVersion) {
_intermediateVersions.add(intermediateVersion);
_needsSorting = true;
}
public void removeFromIntermediateVersions(CGFileIntermediateVersion intermediateVersion) {
_intermediateVersions.remove(intermediateVersion);
_needsSorting = true;
}
@Override
public String getStringRepresentation() {
return getVersionId().major + "." + getVersionId().minor + " - " + getName();
}
@Override
public String getName() {
return _release.getName();
}
@Override
public String getDescription() {
return _release.getDescription();
}
@Override
public Date getDate() {
return _release.getDate();
}
@Override
public String getUserId() {
return _release.getUserId();
}
public static class BeforeFirstRelease extends CGFileReleaseVersion {
/**
* Default constructor
*/
public BeforeFirstRelease(CGFile file) {
super(file, null, null);
}
@Override
public String getInspectorName() {
return Inspectors.GENERATORS.BEFORE_FIRST_RELEASE_INSPECTOR;
}
@Override
public String getHelpText() {
return FlexoLocalization.localizedForKey("before_first_release_help_text");
}
@Override
public String getName() {
return FlexoLocalization.localizedForKey("before_first_release");
}
@Override
public String getDescription() {
return getHelpText();
}
@Override
public Date getDate() {
return getCGFile().getProject().getCreationDate();
}
@Override
public String getUserId() {
return getCGFile().getProject().getCreationUserId();
}
@Override
public String getStringRepresentation() {
return getName();
}
}
public void clean() {
logger.info("Cleaning " + getStringRepresentation());
for (CGFileIntermediateVersion intermediateVersion : _intermediateVersions) {
if (!FileUtils.recursiveDeleteFile(intermediateVersion.getFile())) {
logger.warning("Could not delete file " + intermediateVersion.getFile());
}
intermediateVersion.delete();
}
_intermediateVersions.clear();
setChanged();
notifyObservers(new CGFileReleaseCleaned(this));
}
}