Update of /cvsroot/unicore/unicore/optional/roctopus/src/java/de/fzj/roctopus In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20966/src/java/de/fzj/roctopus Added Files: Task.java Storage.java StorageType.java Site.java Attributes.java Grid.java Location.java RoctopusFactory.java RoctopusFactoryError.java X509IDwithETD.java Config.java X509ID.java File.java RoctopusException.java TaskStatus.java StatusChangedListener.java package.html Submitable.java Filter.java Finder.java ID.java Locatable.java Log Message: --- NEW FILE: Config.java --- package de.fzj.roctopus; import java.util.Set; /** * a collection of Sites, and the means of getting into each site * * @author roger */ public interface Config { public Set<Location> getAllSiteLocations(); /** * * @param location * @return */ public ID findIDforLocation(Location location); public boolean exists(Location location); } --- NEW FILE: X509IDwithETD.java --- package de.fzj.roctopus; import java.security.cert.X509Certificate; public interface X509IDwithETD extends X509ID { public X509Certificate getUserCertificate(); } --- NEW FILE: Finder.java --- package de.fzj.roctopus; import java.util.Properties; class Finder { public static Class find(String key) throws RoctopusFactoryError { try { Properties p = new Properties(); p.load(Finder.class.getResourceAsStream("/roctopus.factory")); return Class.forName(p.getProperty(key)); } catch (Exception e) { throw new RoctopusFactoryError(e); } } } --- NEW FILE: Filter.java --- package de.fzj.roctopus; /** * some kind of filtering strategy ... * * @author roger */ public interface Filter { } --- NEW FILE: Storage.java --- package de.fzj.roctopus; /** * a Site can have a number of Storage(s) associated with it * * @author roger */ public interface Storage extends Locatable { public Site getSite(); public StorageType getType(); public File asFile(String path) throws RoctopusException; } --- NEW FILE: Task.java --- package de.fzj.roctopus; import java.io.File; import java.util.List; /** * a running job (pretty much anything) * * @author roger */ public interface Task { public void startSync(File... files) throws RoctopusException; public void startASync(File... files) throws RoctopusException; public void setAutomaticallyAdvanceToCleanup(boolean aatc); public void block(); public void abort() throws RoctopusException; public void cancel() throws RoctopusException; public void cleanup() throws RoctopusException; public TaskStatus status() throws RoctopusException; public String getID() throws RoctopusException; public String getName() throws RoctopusException; public Site getSite(); public List<File> getOutcomeFiles(); public File getStdOut(); public File getStdErr(); public String getLog() throws RoctopusException; public void registerStatusChangedListener(StatusChangedListener listener); public void removeStatusChangedListener(StatusChangedListener listener); } --- NEW FILE: File.java --- package de.fzj.roctopus; import java.util.Date; import java.util.List; /** * models a file in the Grid * * @author roger */ public interface File extends Locatable { /** * * @return a List<File> for each file found. If 'this' is a file (i.e. not a directory) then a File object representing this is returned * @throws RoctopusException */ public List<File> ls() throws RoctopusException; public Storage getStorage(); public boolean isDirectory() throws RoctopusException; public Date lastModified() throws RoctopusException; public long size(); public boolean canExecute(); public boolean canRead(); public boolean canWrite(); public File getParent() throws RoctopusException; public String getName(); public boolean mkdir() throws RoctopusException; public boolean exists() throws RoctopusException; public boolean delete() throws RoctopusException; public void copyTo(File to, boolean overwrite) throws RoctopusException; public void moveTo(File to, boolean overwrite) throws RoctopusException; public String getPath(); /** * transfer between sites * * @param remoteto * @return * @throws RoctopusException */ public Task transfer(File remoteto, boolean overwrite) throws RoctopusException; /** * import * * @param localfile * @return */ public Task importLocalFile(java.io.File localfile, boolean overwrite) throws RoctopusException; /** * export * * @param localfile * @return * @throws RoctopusException */ public Task exportToLocalFile(java.io.File localfile, boolean overwrite) throws RoctopusException; } --- NEW FILE: TaskStatus.java --- package de.fzj.roctopus; public enum TaskStatus { INITIALISED, IMPORTING, IMPORTING_FINISHED, AWAITING_CLEANUP, CLEANINGUP, CLEANINGUP_FINISHED, ABORTING, CANCELLING, EXECUTING, EXCEPTION, FINISHED, ABORTED }; --- NEW FILE: Locatable.java --- package de.fzj.roctopus; import java.util.List; public interface Locatable { /** * @return some 'pointer' to the Locatable thing. */ public Location getLocation(); /** * @return the current Site, or null if the Locatable doesn'T have a site, i.e. if it's a Grid */ public Site getSite(); /** * @return list of sibling locatables */ //public List<Locatable> getLocatableSiblings(); /** * @return parent locatable */ //public Locatable getLocatableParent(); } --- NEW FILE: Site.java --- package de.fzj.roctopus; import java.util.Date; import java.util.List; /** * a Grid consists of a collection of Site objects * * @author roger */ public interface Site extends Submitable, Locatable { /** * kind of like a ping, only works if the client has valid credentials * * @return */ public boolean ok(); public List<StorageType> getStorages() throws RoctopusException; public Storage getStorage(StorageType type) throws RoctopusException; public Attributes getAttributes() throws RoctopusException; public Grid getGrid(); public Date upSince() throws RoctopusException; } --- NEW FILE: Submitable.java --- package de.fzj.roctopus; import java.util.List; public interface Submitable { /** * * @param jobdesc param left intentionally vague. covers jsdl, ajo, etc ... * @param filter some kind of brokering strategy, can be null ... * @return */ public Task submit(Object jobdesc) throws RoctopusException; public List<Task> getTasks() throws RoctopusException; } --- NEW FILE: ID.java --- package de.fzj.roctopus; /** * how a 'client' of the Grid identifies themselves. designed to be subclassed. * * @author roger */ public interface ID { } --- NEW FILE: RoctopusFactory.java --- package de.fzj.roctopus; /** * bootstrapping or Factory class. * * @author roger */ public abstract class RoctopusFactory { protected RoctopusFactory() { } public static final String ROCTOPUS_FACTORY="roctopus.factory"; /** * finds the providers Factory class instance. * initially there is a very simple strategy for doing so : * it looks for a file called 'roctopus.properties' on the classpath. * this property file should contain a property called 'roctopus.factory'. * the value of this property is used to get the RoctopusFactory instance. * * @return a RoctopusFactory instance * @throws RoctopusFactoryError */ public static RoctopusFactory getInstance() throws RoctopusFactoryError { Class c=Finder.find(ROCTOPUS_FACTORY); RoctopusFactory roctopusfactory; try { roctopusfactory = (RoctopusFactory)c.newInstance(); } catch (Exception e) { throw new RoctopusFactoryError(e); } return roctopusfactory; } public abstract Grid getGrid(Config config); } --- NEW FILE: RoctopusException.java --- package de.fzj.roctopus; public class RoctopusException extends Exception { public RoctopusException() { super(); } public RoctopusException(String message, Throwable cause) { super(message, cause); } public RoctopusException(String message) { super(message); } public RoctopusException(Throwable cause) { super(cause); } } --- NEW FILE: X509ID.java --- package de.fzj.roctopus; import java.io.File; public interface X509ID extends ID { public File getKeystore(); public String getPassword(); } --- NEW FILE: package.html --- <html> <head> </head> <body> An high-level API, primarily designed for UNICORE, for the construction of client, portals, agents, etc. The intention is to keep it quite general so that implementation using UNICORE/GS (or even other Grid middleware) might be possible in future. </body> </html> --- NEW FILE: StorageType.java --- package de.fzj.roctopus; import java.util.HashMap; import java.util.Map; public class StorageType { private String name; private static Map<String,StorageType> storagetypes = new HashMap<String,StorageType>(); private StorageType(String name) { this.name = name; } public static StorageType getType(String name) { name = name.toLowerCase(); if (storagetypes.get(name)==null) { storagetypes.put(name, new StorageType(name)); } return storagetypes.get(name); } public String getName() { return this.name; } public String toString() { return getName(); } } --- NEW FILE: Location.java --- package de.fzj.roctopus; import java.util.List; public interface Location { public boolean isSite(); public boolean isStorage(); public boolean isFile(); public Location getParent() throws RoctopusException; /** * @return the site of the location, or null */ public Location getSite(); /** * @return the storage of the location, or null */ public Location getStorage(); } --- NEW FILE: RoctopusFactoryError.java --- package de.fzj.roctopus; public class RoctopusFactoryError extends Error { public RoctopusFactoryError() { super(); } public RoctopusFactoryError(String message, Throwable cause) { super(message, cause); } public RoctopusFactoryError(String message) { super(message); } public RoctopusFactoryError(Throwable cause) { super(cause); } } --- NEW FILE: StatusChangedListener.java --- package de.fzj.roctopus; public interface StatusChangedListener { public void notify(TaskStatus newstate, Task task); } --- NEW FILE: Grid.java --- package de.fzj.roctopus; import java.util.List; /** * top level class modelling the whole 'Grid' as one particular client configuration sees it. * @author roger */ public interface Grid extends Submitable { public Config getConfig(); public List<Site> getAllSites() throws RoctopusException; public Location parseLocation(Object location) throws RoctopusException; public Site locateSite(Location location) throws RoctopusException; public Storage locateStorage(Location location) throws RoctopusException; public File locateFile(Location location) throws RoctopusException; public Locatable locate(Location location) throws RoctopusException; public void close(); } --- NEW FILE: Attributes.java --- package de.fzj.roctopus; import java.util.Collection; /** * the Attributes class models a collection of small pieces of information * about a system. Basically each Attribute is a similar model to that of a ResourceProperty * (from WSRF). * * @author roger */ public interface Attributes { public Collection getAllAttributes() throws RoctopusException; /** * general type of method. most likely key will be a QName, and the returning object will be * some kind of XML representation. however, key could be the name of one of the classes in the * org.unicore.resources package, and the returned object could be an object of that type. * * have to see how this one pans out ... * * @param key * @return * @throws RoctopusException */ public Collection getAttribute(Object key) throws RoctopusException; public Site getSite(); public String toXMLString() throws RoctopusException; } |