/*****************************************************************************
* 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.cui;
import java.io.File;
import java.io.IOException;
import java.util.Vector;
import org.ossnoize.fakestarteam.ProjectProvider;
import org.ossnoize.fakestarteam.SerializableUser;
import org.ossnoize.fakestarteam.SerializableView;
import org.ossnoize.fakestarteam.UserProvider;
import com.starbase.starteam.Folder;
import com.starbase.starteam.Item;
import com.starbase.starteam.Project;
import com.starbase.starteam.Server;
import com.starbase.starteam.Status;
import com.starbase.starteam.View;
import jargs.gnu.CmdLineParser;
import jargs.gnu.CmdLineParser.IllegalOptionValueException;
import jargs.gnu.CmdLineParser.UnknownOptionException;
public class Creator {
/**
* @param args
*/
public static void main(String[] args) {
CmdLineParser parser = new CmdLineParser();
CmdLineParser.Option createProject = parser.addStringOption("create-project");
CmdLineParser.Option listProjects = parser.addBooleanOption('l', "list-projects");
CmdLineParser.Option selectProject = parser.addStringOption('p', "project");
CmdLineParser.Option createView = parser.addStringOption("create-view");
CmdLineParser.Option parentView = parser.addStringOption("parent-view");
CmdLineParser.Option listViews = parser.addBooleanOption('L', "list-views");
CmdLineParser.Option selectView = parser.addStringOption('v', "view");
CmdLineParser.Option createUser = parser.addStringOption("create-user");
CmdLineParser.Option user = parser.addStringOption('U', "user");
CmdLineParser.Option password = parser.addStringOption('P', "password");
CmdLineParser.Option setPassword = parser.addStringOption("set-password");
CmdLineParser.Option userFullName = parser.addStringOption("fullname");
CmdLineParser.Option createFolders = parser.addStringOption("create-folders");
CmdLineParser.Option addFileInPath = parser.addStringOption("path");
CmdLineParser.Option comment = parser.addStringOption('m', "comment");
CmdLineParser.Option hierarchy = parser.addBooleanOption('H', "hierarchy");
CmdLineParser.Option deleteFile = parser.addStringOption('d', "delete-file");
CmdLineParser.Option deleteFolder = parser.addStringOption('D', "delete-folder");
try {
parser.parse(args);
} catch (IllegalOptionValueException e) {
System.err.println(e.getMessage());
printHelp();
System.exit(1);
} catch (UnknownOptionException e) {
System.err.println(e.getMessage());
printHelp();
System.exit(2);
}
Server server = new Server("localhost", 23456);
String createUserName = (String) parser.getOptionValue(createUser);
if(null != createUserName) {
UserProvider.getInstance().createNewUser(createUserName);
}
String loginName = (String) parser.getOptionValue(user);
String passwd = (String) parser.getOptionValue(password);
server.connect();
if(0 < server.logOn(loginName, passwd)) {
System.out.println("Connected to the fake server");
}
if(!server.isLoggedOn()) {
System.err.println("The user " + loginName + " has not logged in.");
System.exit(3);
}
String createProjectName = (String) parser.getOptionValue(createProject);
if(null != createProjectName) {
ProjectProvider.getInstance().createNewProject(server, createProjectName, File.separator);
}
String setUserPassword = (String) parser.getOptionValue(setPassword);
String fullName = (String) parser.getOptionValue(userFullName);
if(null != loginName && (null != setUserPassword || null != fullName)) {
SerializableUser userObject = UserProvider.getInstance().findUser(loginName);
if(null != userObject) {
if(null != setUserPassword)
userObject.setPassword(setUserPassword);
if(null != fullName)
userObject.setName(fullName);
UserProvider.getInstance().applyChanges();
} else {
System.err.println("Could not find the user named " + loginName);
}
}
Boolean listProject = (Boolean) parser.getOptionValue(listProjects);
if(null != listProject && listProject) {
for(Project p : server.getProjects()) {
System.out.println("* " + p.getName());
}
}
String projectName = (String) parser.getOptionValue(selectProject);
if(null != projectName) {
Project selectedProject = null;
for(Project p : server.getProjects()) {
if(p.getName().equalsIgnoreCase(projectName)) {
selectedProject = p;
break;
}
}
if(null == selectedProject) {
System.out.println("Could not find project named :" + projectName);
}
Boolean listView = (Boolean) parser.getOptionValue(listViews);
if(null != listView && listView && null != selectedProject) {
System.out.println(selectedProject.getName());
for(View v : selectedProject.getViews()) {
String line = "- " + v.getName();
if(null != v.getParentView()) {
line += "(Child of:" + v.getParentView() + ")";
}
System.out.println(line);
}
}
String createViewNamed = (String) parser.getOptionValue(createView);
String parentViewNamed = (String) parser.getOptionValue(parentView);
View from = null;
if(null == parentViewNamed) {
from = selectedProject.getDefaultView();
} else {
for(View v : selectedProject.getViews()) {
if(v.getName().equalsIgnoreCase(parentViewNamed)) {
from = v;
break;
}
}
}
if(null != createViewNamed) {
new SerializableView(from, createViewNamed, createViewNamed, File.separator).update();
}
String selectedViewNamed = (String) parser.getOptionValue(selectView);
if(null != selectedViewNamed) {
View selectedView = null;
for(View v : selectedProject.getViews()) {
if(v.getName().equalsIgnoreCase(selectedViewNamed)) {
selectedView = v;
}
}
if(selectedView == null) {
System.out.println("Could not find the view named " + selectedViewNamed);
} else {
String folderToCreate = (String) parser.getOptionValue(createFolders);
if(null != folderToCreate) {
String path[] = folderToCreate.split("/");
Folder stFolder = selectedView.getRootFolder();
for(String folder : path) {
boolean found = false;
for(Folder f : stFolder.getSubFolders()) {
if(f.getName().equalsIgnoreCase(folder)) {
stFolder = f;
found = true;
}
}
if(!found) {
stFolder = new Folder(stFolder, folder, "");
}
}
}
String addInPath = (String) parser.getOptionValue(addFileInPath);
if(null != addInPath) {
String path[] = addInPath.split("/");
Folder stFolder = selectedView.getRootFolder();
boolean found = false;
for(String folder : path) {
found = false;
for(Folder f : stFolder.getSubFolders()) {
if(f.getName().equalsIgnoreCase(folder)) {
stFolder = f;
found = true;
}
}
}
if(found) {
Vector filesToDelete = parser.getOptionValues(deleteFile);
for(Object o : filesToDelete) {
if(o instanceof String) {
String filename = (String)o;
for(Item i : stFolder.getItems(stFolder.getTypeNames().FILE)) {
if(i instanceof com.starbase.starteam.File) {
com.starbase.starteam.File f = (com.starbase.starteam.File) i;
if(f.getName().equals(filename)) {
f.remove();
System.out.println("Removed file " + filename);
}
}
}
} else {
System.out.println("Object in delete file vector is not of type String but of type: " + o.getClass().getName());
}
}
Vector foldersToDelete = parser.getOptionValues(deleteFolder);
for(Object o : foldersToDelete) {
if(o instanceof String) {
String foldername = (String)o;
for(Folder f : stFolder.getSubFolders()) {
if(f.getName().equals(foldername)) {
f.remove();
System.out.println("Removed folder " + foldername);
}
}
} else {
System.out.println("Object in delete folder vector is not of type String but of type " + o.getClass().getName());
}
}
String commentToModification = (String) parser.getOptionValue(comment);
if(null == commentToModification) {
commentToModification = "";
}
String files[] = parser.getRemainingArgs();
for(String filename : files) {
File importFile = new File(filename);
if(importFile.exists()) {
Item[] fileItems = stFolder.getItems(stFolder.getTypeNames().FILE);
boolean foundFile = false;
for(Item i : fileItems) {
if(i instanceof com.starbase.starteam.File) {
com.starbase.starteam.File f = (com.starbase.starteam.File) i;
if(null != f && f.getName().equals(importFile.getName())) {
foundFile = true;
try {
int status = f.getStatus(importFile);
if(status == Status.MODIFIED) {
f.checkinFrom(importFile, commentToModification, Item.LockType.UNCHANGED, false, true);
} else {
System.out.println("Status of file is not MODIFIED but " + status);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
if(!foundFile) {
try {
com.starbase.starteam.File f = new com.starbase.starteam.File(stFolder);
f.add(importFile, importFile.getName(), "", commentToModification, Item.LockType.UNLOCKED, true);
} catch (IOException e) {
System.out.println("Could not add file " + importFile);
e.printStackTrace();
}
}
} else {
System.out.println("Cannot find the file: " + filename);
}
}
}
else
{
System.out.println("Cannot find the specified path: " + addInPath);
}
}
Boolean showHierarchy = (Boolean)parser.getOptionValue(hierarchy);
if(null != showHierarchy && showHierarchy.booleanValue()) {
System.out.println("Showing content of View");
showContentOfFolder(selectedView.getRootFolder(), "");
}
}
}
}
}
private static void showContentOfFolder(Folder rootFolder, String ident) {
System.out.println(ident + "+" + rootFolder.getName() + "\t" + rootFolder.getObjectID());
for(Folder f : rootFolder.getSubFolders()) {
showContentOfFolder(f, ident + " ");
}
for(Item i : rootFolder.getItems(rootFolder.getTypeNames().FILE)) {
com.starbase.starteam.File f = (com.starbase.starteam.File)i;
System.out.println(ident + "-" + f.getName() + "\t" + f.getRevisionNumber() +
"\t" + f.getSizeEx() + "\t" + f.getObjectID());
}
System.out.println(ident + ">" + rootFolder.getName());
}
private static void printHelp() {
System.out.println("-p <project name>");
}
}