blob: 13fdbc007958c8577eff679b01dcb32a3a0cc3d1 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation and others.
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// Contributors:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.services;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.epf.library.ILibraryManager;
import org.eclipse.epf.library.ILibraryServiceListener;
import org.eclipse.epf.library.LibraryService;
import org.eclipse.epf.library.events.ILibraryChangeListener;
import org.eclipse.epf.uma.MethodConfiguration;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.MethodLibrary;
import com.ibm.icu.util.Calendar;
/**
* This class manages the versioning of the element in the method element.
* This class is not used any more since version is not managed automatically
*
* @author Jinhua Xi
* @since 1.0
*
* @deprecated
*/
public class VersionManager {
private ILibraryManager manager;
private ILibraryServiceListener libSvcListener = null;
private ILibraryChangeListener libListener = null;
private boolean inProcessing = false;
public VersionManager(ILibraryManager manager) {
this.manager = manager;
initialize();
}
private void initialize() {
libSvcListener = new ILibraryServiceListener() {
public void configurationSet(MethodConfiguration config) {
//System.out.println("configuration set: " + LibraryUtil.getTypeName(config));
}
public void libraryClosed(MethodLibrary library) {
//System.out.println("Library closed: " + LibraryUtil.getTypeName(library));
}
public void libraryCreated(MethodLibrary library) {
//System.out.println("Library closed: " + LibraryUtil.getTypeName(library));
}
public void libraryOpened(MethodLibrary library) {
//System.out.println("Library opened: " + LibraryUtil.getTypeName(library));
}
public void libraryReopened(MethodLibrary library) {
//System.out.println("Library reopened: " + LibraryUtil.getTypeName(library));
}
public void librarySet(MethodLibrary library) {
//System.out.println("Library set: " + LibraryUtil.getTypeName(library));
}
};
LibraryService.getInstance().addListener(libSvcListener);
// add library change listener
libListener = new ILibraryChangeListener() {
public void libraryChanged(int option, Collection changedItems) {
if (option == ILibraryChangeListener.OPTION_CHANGED
// || option == ILibraryChangeListener.OPTION_CREATED
|| option == ILibraryChangeListener.OPTION_DELETED) {
if (!inProcessing && changedItems != null) {
inProcessing = true;
try {
processChanges(option, changedItems);
} finally {
inProcessing = false;
}
}
}
}
};
manager.addListener(libListener);
}
public void dispose() {
LibraryService.getInstance().removeListener(libSvcListener);
ILibraryManager manager = (ILibraryManager) LibraryService
.getInstance().getCurrentLibraryManager();
if (manager != null) {
manager.removeListener(libListener);
}
}
private void processChanges(int option, Collection changedItems) {
// System.out.println("================= BEGIN: processChanges
// ================");
// System.out.println("changed items: " + changedItems);
// System.out.println("================= END: processChanges
// ================");
if (changedItems == null || changedItems.size() == 0) {
return;
}
for (Iterator it = changedItems.iterator(); it.hasNext();) {
MethodElement element = (MethodElement) it.next();
org.eclipse.epf.uma.MethodUnit pkg;
// note only package has version,
// it the changed element is a package
if (element instanceof org.eclipse.epf.uma.MethodUnit) {
pkg = (org.eclipse.epf.uma.MethodUnit) element;
switch (option) {
case ILibraryChangeListener.OPTION_CHANGED:
updateVersion(pkg);
break;
case ILibraryChangeListener.OPTION_NEWCHILD:
updateVersion(pkg);
updateVersion((org.eclipse.epf.uma.MethodUnit) pkg
.eContainer());
break;
case ILibraryChangeListener.OPTION_DELETED:
updateVersion((org.eclipse.epf.uma.MethodUnit) pkg
.eContainer());
break;
}
} else if (element != null) // TODO: changedItems somtimes contains
// null element. This must not be the
// case.
{
// it the element is not a package, update the parent
EObject parent = element.eContainer();
while (parent != null
&& !(parent instanceof org.eclipse.epf.uma.MethodUnit)) {
parent = parent.eContainer();
}
if (parent != null) {
pkg = (org.eclipse.epf.uma.MethodUnit) parent;
updateVersion(pkg);
}
/*
* switch (option) { case ILibraryChangeListener.OPTION_CHANGED:
* case ILibraryChangeListener.OPTION_CREATED: case
* ILibraryChangeListener.OPTION_DELETED: updateVersion(pkg);
* break; }
*/
}
}
}
public void updateVersion(org.eclipse.epf.uma.MethodUnit pkg) {
if (pkg == null) {
return;
}
// String oldVer = pkg.getVersion();
// create a version number based on the date
Calendar c = Calendar.getInstance();
int y = c.get(Calendar.YEAR);
int m = c.get(Calendar.MONTH) + 1;
int d = c.get(Calendar.DATE);
long t = c.getTimeInMillis();
String baseVer = Integer.toString(y) + Integer.toString(m)
+ Integer.toString(d);
String miniVer = Long.toHexString(t);
boolean oldNotify = pkg.eDeliver();
try {
pkg.eSetDeliver(false);
/*
* System.out.println("=============================");
* System.out.println(" eDeviler()=" + pkg.eDeliver());
* System.out.println("=============================");
*/
pkg.setVersion(baseVer + "." + miniVer); //$NON-NLS-1$
} finally {
pkg.eSetDeliver(oldNotify);
}
}
}