package com.perforce.bumble;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.perforce.bumble.connection.ConnectionService;
import com.perforce.bumble.diff.DiffService;
import com.perforce.bumble.pending.Pending;
import com.perforce.bumble.pending.PendingService;
import com.perforce.bumble.pending.StatusService;
import com.perforce.bumble.project.Project;
import com.perforce.bumble.project.ProjectService;
import freemarker.cache.ClassTemplateLoader;
import freemarker.template.Configuration;
import spark.ModelAndView;
import spark.Spark;
import spark.template.freemarker.FreeMarkerEngine;
public class Bumble { // extends Application {
private static Logger logger = LoggerFactory.getLogger(Bumble.class);
// @Override
// public void start(Stage stage) throws Exception {
// Browser browser = new Browser();
// BrowserView browserView = new BrowserView(browser);
//
// StackPane pane = new StackPane();
// pane.getChildren().add(browserView);
// Scene scene = new Scene(pane, 800, 600);
// stage.setTitle("JxBrowser: JavaFX - Hello World");
// stage.setScene(scene);
// stage.show();
//
// browser.loadURL("http://localhost:4567/work/jenkins");
// }
public static void main(String[] args) throws Exception {
// Static files (CSS, JS, etc...)
Spark.staticFileLocation("/public");
// Generate Freemarker configuration
ClassTemplateLoader template = new ClassTemplateLoader(Bumble.class, "");
Configuration configuration = new Configuration();
configuration.setTemplateLoader(template);
// Service for projects
ProjectService projects = new ProjectService();
// Page for work in progress
Spark.get("/", (request, response) -> {
Map<String, Object> model = new HashMap<>();
return new ModelAndView(model, "/page-work.html");
} , new FreeMarkerEngine(configuration));
// Get projects
Spark.get("/projects", (req, res) -> {
return projects.list();
} , JsonUtil.json());
// Get work in progress
Spark.get("/pending/:project", (request, response) -> {
String projStr = request.params(":project");
Project project = projects.get(projStr);
// get a Perforce connection
ConnectionService connection = new ConnectionService(project);
connection.connect();
if (!connection.isLogin()) {
connection.login("");
}
// look for pending work
StatusService status = new StatusService(connection.getConnection());
status.update();
// get list of pending files
PendingService pending = new PendingService(connection.getConnection());
List<Pending> files = pending.getFiles();
connection.disconnect();
return files;
} , JsonUtil.json());
Spark.post("/diff", (request, responce) -> {
String projStr = request.queryParams("project");
Project project = projects.get(projStr);
ConnectionService connection = new ConnectionService(project);
connection.connect();
if (!connection.isLogin()) {
connection.login("");
}
String path = request.queryParams("path");
DiffService diff = new DiffService(connection.getConnection());
List<String> unified = diff.getDiff(path);
connection.disconnect();
return unified;
} , JsonUtil.json());
Spark.post("/submit", (request, response) -> {
String projStr = request.queryParams("project");
Project project = projects.get(projStr);
ConnectionService connection = new ConnectionService(project);
connection.connect();
if (!connection.isLogin()) {
connection.login("");
}
String desc = request.queryParams("description");
logger.info("Description: " + desc);
String[] files = request.queryParamsValues("files[]");
logger.info("Files: " + files);
// submit pending work
PendingService pending = new PendingService(connection.getConnection());
long change = pending.submit(desc, files);
connection.disconnect();
return change;
} , JsonUtil.json());
Spark.get("/diff2", (request, response) -> {
Map<String, Object> model = new HashMap<>();
File a = new File("/Users/pallen/Workspaces/main.hive/main/core/upload/diff/DepotFactory.java~1");
File b = new File("/Users/pallen/Workspaces/main.hive/main/core/upload/diff/DepotFactory.java~2");
Diff d = new Diff(a, b);
model.put("deltas", d.getDeltas());
model.put("unified", d.getUnified());
return new ModelAndView(model, "/page-edit.html");
} , new FreeMarkerEngine(configuration));
// Application.launch(args);
}
}