/*****************************************************************************
* All public interface based on Starteam API are a property of Borland,
* those interface are reproduced here only for testing purpose. You should
* never use those interface to create a competitive product to the Starteam
* Server.
*
* The implementation is given AS-IS and should not be considered a reference
* to the API. The behavior on a lots of method and class will not be the
* same as the real API. The reproduction only seek to mimic some basic
* operation. You will not found anything here that can be deduced by using
* the real API.
*
* Fake-Starteam is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*****************************************************************************/
package org.ossnoize.fakestarteam;
import java.io.File;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import com.starbase.starteam.Project;
import com.starbase.starteam.Server;
import com.starbase.starteam.View;
public class SerializableProject extends Project implements Serializable {
/**
*
*/
private static final long serialVersionUID = -3283403336147311883L;
private String name;
private String rootDir;
private Integer defaultViewId;
private Map<Integer, SerializableView> views;
protected SerializableProject() {
}
public SerializableProject(Server server, String name, String rootDirectory) {
super(server, name, rootDirectory);
this.name = name;
this.rootDir = rootDirectory;
createDefaultView();
}
private void createDefaultView() {
if(views == null) {
views = new HashMap<Integer, SerializableView>();
}
SerializableView main = new SerializableView(null, "MAIN", "Main view", File.separator);
main.setProject(this);
defaultViewId = main.getID();
views.put(main.getID(), main);
}
void initProject() {
if(views == null || defaultViewId == 0) {
createDefaultView();
}
for(Map.Entry<Integer, SerializableView> e : views.entrySet()) {
e.getValue().setProject(this);
}
}
@Override
public void update() {
if(isNew()) {
if(ProjectProvider.getInstance().exist(this)) {
throw new Error("Duplicate project ID");
}
super.update();
ProjectProvider.getInstance().addNewProject(this);
} else {
ProjectProvider.getInstance().writeProjectList();
}
}
@Override
public String getName() {
return name;
}
@Override
public View[] getViews() {
View[] ret = new View[views.size()];
views.values().toArray(ret);
return ret;
}
@Override
public View getDefaultView() {
return views.get(defaultViewId);
}
void addNewView(SerializableView serializableView) {
for(View v : views.values()) {
if(v.getName().equalsIgnoreCase(serializableView.getName())) {
throw new Error("Cannot create this view, there is already one with the same name");
}
}
views.put(serializableView.getID(), serializableView);
}
}