blob: 01b6af12be46b2fe4fd798beb2c25afca626a44e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2010 Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Sonatype, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.m2e.scm.spi;
import java.io.File;
import java.io.InputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.m2e.scm.MavenProjectScmInfo;
/**
* An SCM handler base class
*
* @author Eugene Kuleshov
*/
public abstract class ScmHandler implements Comparable<ScmHandler>, IExecutableExtension {
private static final Logger log = LoggerFactory.getLogger(ScmHandler.class);
public static final String ATTR_CLASS = "class"; //$NON-NLS-1$
public static final String ATTR_TYPE = "type"; //$NON-NLS-1$
public static final String ATTR_PRIORITY = "priority"; //$NON-NLS-1$
private String type;
private int priority;
public String getType() {
return type;
}
public int getPriority() {
return priority;
}
/**
* Opens resource from SCM
*
* @param url an url in maven-scm format for the resource to open
* @param revision a resource revision to open
* @throws CoreException when selected resource can't be open
* @see http://maven.apache.org/scm/scm-url-format.html
*/
public InputStream open(String url, String revision) throws CoreException {
return null;
}
/**
* @param info
* @param location
* @param monitor
*/
public abstract void checkoutProject(MavenProjectScmInfo info, //
File location, IProgressMonitor monitor) throws CoreException, InterruptedException;
// IExecutableExtension
public void setInitializationData(IConfigurationElement config, String propertyName, Object data) {
String handlerClass = config.getAttribute(propertyName);
String type = config.getAttribute(ATTR_TYPE);
String priority = config.getAttribute(ATTR_PRIORITY);
this.type = type;
if(priority != null) {
try {
this.priority = Integer.parseInt(priority);
} catch(Exception ex) {
log.error("Unable to parse priority for " + handlerClass, ex);
}
}
}
// Comparable
public int compareTo(ScmHandler o) {
if(o != null) {
ScmHandler handler = o;
int res = getType().compareTo(handler.getType());
if(res == 0) {
res = getPriority() - handler.getPriority();
}
return res;
}
return -1;
}
public int hashCode() {
final int prime = 31;
int result = prime + this.priority;
return prime * result + ((this.type == null) ? 0 : this.type.hashCode());
}
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(obj == null) {
return false;
}
if(getClass() != obj.getClass()) {
return false;
}
ScmHandler other = (ScmHandler) obj;
if(this.priority != other.priority) {
return false;
}
if(this.type == null) {
if(other.type != null) {
return false;
}
} else if(!this.type.equals(other.type)) {
return false;
}
return true;
}
}