blob: 86165548b3e050b4fba27a4bdd191d8309e62f66 [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 API and implementation
*******************************************************************************/
package org.eclipse.ltk.core.refactoring;
import org.eclipse.core.runtime.Assert;
/**
* Descriptor object of a refactoring session.
* <p>
* Refactoring session descriptors encapsulate a series of refactoring
* descriptors. They are used to represent chunks of the global workspace
* refactoring history or refactoring scripts created by the user.
* </p>
* <p>
* Refactoring session descriptors contain the following information:
* <ul>
* <li> an optional comment string, which provides a full human-readable
* description of the refactoring session. Comments are automatically generated
* by refactorings and provide more refactoring-specific information, such as
* which elements have participated in which refactorings. </li>
* <li> a list of refactoring descriptors describing the refactorings executed
* during a refactoring session. The refactoring list is sorted in ascending
* order by the execution time of the refactorings. </li>
* <li> a version tag describing version information of the refactoring session
* descriptor format. The version tag is used to provide a means of schema
* evolution on the refactoring framework level. Clients which would like to
* version their refactoring descriptors are required to implement this in their
* specific subclasses of {@link RefactoringDescriptor}. </li>
* </ul>
* </p>
* <p>
* Refactoring session descriptors are potentially heavy weight objects which
* should not be held on to. Use refactoring descriptor proxies
* {@link RefactoringDescriptorProxy} to present refactoring descriptors in the
* user interface or otherwise manipulate refactoring histories. More details
* about a particular refactoring session can be revealed in the comment, which
* contains more text with refactoring-specific information.
* </p>
* <p>
* All time stamps are measured as the milliseconds since January 1, 1970,
* 00:00:00 GMT.
* </p>
* <p>
* Note: this class is not indented to be subclassed outside the refactoring
* framework.
* </p>
*
* @see RefactoringDescriptor
*
* @since 3.2
*/
public class RefactoringSessionDescriptor {
/** The version constant for v1.0 (value: 1.0) */
public static final String VERSION_1_0= "1.0"; //$NON-NLS-1$
/** The comment , or <code>null</code> for no comment */
private final String fComment;
/** The refactoring descriptors */
private final RefactoringDescriptor[] fDescriptors;
/** The non-empty version string */
private final String fVersion;
/**
* Creates a new refactoring session descriptor.
*
* @param descriptors
* the refactoring descriptors in executed order, or the empty
* array
* @param version
* the non-empty version tag, one of the <code>VERSION_xxx</code>
* constants
* @param comment
* the comment of the refactoring session, or <code>null</code>
* for no comment
*/
public RefactoringSessionDescriptor(final RefactoringDescriptor[] descriptors, final String version, final String comment) {
Assert.isNotNull(descriptors);
Assert.isTrue(version != null && !"".equals(version)); //$NON-NLS-1$
fDescriptors= new RefactoringDescriptor[descriptors.length];
System.arraycopy(descriptors, 0, fDescriptors, 0, descriptors.length);
fVersion= version;
fComment= comment;
}
/**
* Returns the comment.
*
* @return the comment, or the empty string
*/
public final String getComment() {
return (fComment != null) ? fComment : ""; //$NON-NLS-1$
}
/**
* Returns the refactoring descriptors.
*
* @return the array of refactoring descriptors in executed order, or the
* empty array
*/
public final RefactoringDescriptor[] getRefactorings() {
final RefactoringDescriptor[] result= new RefactoringDescriptor[fDescriptors.length];
System.arraycopy(fDescriptors, 0, result, 0, result.length);
return result;
}
/**
* Returns the version tag.
*
* @return the version tag
*/
public final String getVersion() {
return fVersion;
}
}