/*******************************************************************************
* Copyright (c) 2012 Pivotal Software, Inc.
* 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:
* Pivotal Software, Inc. - initial API and implementation
*******************************************************************************/
package org.springsource.ide.eclipse.commons.content.core;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Assert;
import org.osgi.framework.Version;
import org.springsource.ide.eclipse.commons.content.core.util.Descriptor;
/**
* @author Terry Denney
* @author Christian Dupuis
*/
public class ContentItem {
private Descriptor localDescriptor;
private Descriptor remoteDescriptor;
private Descriptor defaultDescriptor;
private final String id;
private final IProject runtimeProject;
public ContentItem(String id) {
this(id, null);
}
public ContentItem(String id, IProject runtimeProject) {
this.id = id;
this.runtimeProject = runtimeProject;
}
public String getDescription() {
return (defaultDescriptor != null) ? defaultDescriptor.getDescription() : null;
}
public long getDownloadSize() {
return (remoteDescriptor != null) ? remoteDescriptor.getSize() : 0;
}
public String getId() {
return id;
}
public Descriptor getLocalDescriptor() {
return localDescriptor;
}
public String getName() {
return (defaultDescriptor != null) ? defaultDescriptor.getName() : null;
}
public String getPath() {
return defaultDescriptor.getId() + "-" + defaultDescriptor.getVersion();
}
public String getPathFromRemoteDescriptor() {
return remoteDescriptor.getId() + "-" + remoteDescriptor.getVersion();
}
public Descriptor getRemoteDescriptor() {
return remoteDescriptor;
}
public boolean isLocal() {
return localDescriptor != null;
}
public boolean isRuntimeDefined() {
return runtimeProject != null;
}
public IProject getRuntimeProject() {
return runtimeProject;
}
public boolean isNewerVersionAvailable() {
if (localDescriptor != null && remoteDescriptor != null) {
return (new Version(localDescriptor.getVersion()).compareTo(new Version(remoteDescriptor.getVersion())) < 0);
}
return false;
}
public boolean needsDownload() {
return !isLocal() || isNewerVersionAvailable();
}
public void setLocalDescriptor(Descriptor localDescriptor) {
Assert.isNotNull(localDescriptor);
if (shouldReplace(this.localDescriptor, localDescriptor)) {
this.localDescriptor = localDescriptor;
this.defaultDescriptor = localDescriptor;
}
}
public void setRemoteDescriptor(Descriptor remoteDescriptor) {
Assert.isNotNull(remoteDescriptor);
if (shouldReplace(this.remoteDescriptor, remoteDescriptor)) {
this.remoteDescriptor = remoteDescriptor;
if (this.defaultDescriptor == null) {
this.defaultDescriptor = remoteDescriptor;
}
}
}
private boolean shouldReplace(Descriptor oldDescriptor, Descriptor newDescriptor) {
Assert.isTrue(newDescriptor.isValid());
if (oldDescriptor != null) {
if (new Version(oldDescriptor.getVersion()).compareTo(new Version(newDescriptor.getVersion())) >= 0) {
// keep more recent version
return false;
}
}
return true;
}
@Override
public String toString() {
return id;
}
}