/*************************************************************************************
* Copyright (c) 2010-2011 Red Hat, Inc. 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:
* JBoss by Red Hat - Initial implementation.
************************************************************************************/
package org.jboss.tools.runtime.core.model;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author snjeza
*
*/
public class RuntimePath implements Cloneable {
private String path;
private boolean scanOnEveryStartup;
private List<RuntimeDefinition> runtimeDefinitions;
private long timestamp;
public RuntimePath(String path) {
this.path = path;
this.scanOnEveryStartup = false;
this.runtimeDefinitions = new ArrayList<RuntimeDefinition>();
this.timestamp = -1;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public boolean isScanOnEveryStartup() {
return scanOnEveryStartup;
}
public void setScanOnEveryStartup(boolean scanOnEveryStartup) {
this.scanOnEveryStartup = scanOnEveryStartup;
}
public RuntimeDefinition[] getRuntimeDefinitions() {
return runtimeDefinitions.toArray(new RuntimeDefinition[runtimeDefinitions.size()]);
}
public void setRuntimeDefinitions(RuntimeDefinition[] defs2) {
ArrayList<RuntimeDefinition> defs = new ArrayList<RuntimeDefinition>();
defs.addAll(Arrays.asList(defs2));
runtimeDefinitions = defs;
}
public void addRuntimeDefinition(RuntimeDefinition def) {
if( !runtimeDefinitions.contains(def))
runtimeDefinitions.add(def);
}
@Override
@SuppressWarnings("unchecked")
public Object clone() throws CloneNotSupportedException {
RuntimePath runtimePath = new RuntimePath(path);
runtimePath.setScanOnEveryStartup(scanOnEveryStartup);
runtimePath.runtimeDefinitions = (List<RuntimeDefinition>) ((ArrayList<RuntimeDefinition>)runtimeDefinitions).clone();
return runtimePath;
}
public boolean isModified() {
if (path == null || path.isEmpty()) {
return false;
}
if (timestamp < 0) {
return true;
}
File directory = new File(path);
if (! directory.isDirectory()){
return false;
}
try {
return directory.lastModified() > timestamp;
} catch (Exception e) {
return false;
}
}
@Override
public String toString() {
return "RuntimePath [path=" + path + "]"; //$NON-NLS-1$ //$NON-NLS-2$
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((path == null) ? 0 : path.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
RuntimePath other = (RuntimePath) obj;
if (path == null) {
if (other.path != null)
return false;
} else if (!path.equals(other.path))
return false;
return true;
}
}