Fixed type hierarchy problem on command-executor-object api level

Edward M. Kagan 5 years ago
parent 7438de77ef
commit f02b304cd7

1
.gitignore vendored

@ -4,3 +4,4 @@ target
.gitignore
.classpath
nbactions.xml
traqtor-demo-workspace

@ -0,0 +1,9 @@
package link.pagan.traqtor._api;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
abstract class Commanded<SELF extends Commanded<SELF>> {
}

@ -7,25 +7,33 @@ import link.pagan.traqtor._api.result.CommandExecResultStatus;
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public abstract class Executor<T> {
public abstract class Executor<T extends Executor<T>> extends Commanded<T> {
private static boolean paranoindLoggin = false;
private static boolean mute = true;
public CommandExecResult execute(Command<Executor<T>> command) {
public CommandExecResult execute(Command<T> command, T arg) {
CommandExecResult result = new CommandExecResult();
command.setResultHolder(result);
command.exec(this);
if (paranoindLoggin) {
result.print();
} else {
if (result.getStatus() != CommandExecResultStatus.DONE) {
command.exec(arg);
if (!mute){
if (paranoindLoggin) {
result.print();
} else {
if (result.getStatus() != CommandExecResultStatus.DONE) {
result.print();
}
}
}
return result;
}
public static void enableParanoindLoggin() {
enableLog();
paranoindLoggin = true;
}
public static void enableLog() {
mute = false;
}
}

@ -11,24 +11,23 @@ import link.pagan.traqtor.api.workspace.Workspace;
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class Traqtor extends Executor {
public class Traqtor extends Executor<Traqtor> {
private static Traqtor env = new Traqtor();
public static CommandExecResult exec(Command<Traqtor> command) {
return env.execute(command);
return env.execute(command, env);
}
static void reset() {
env = new Traqtor();
}
Workspace workspace;
public static Workspace getWorkspace() {
return env.workspace;
}
public static class CreateWorkspace extends Command<Traqtor> {
@ -101,7 +100,7 @@ public class Traqtor extends Executor {
return fail("IO erorr while creating " + Workspace.JSON_FILENAME + ".json in workspace root directory");
}
}
String hold = traqtor.workspace.getRoot();
traqtor.workspace.setRoot(workspacePath);
@ -127,11 +126,11 @@ public class Traqtor extends Executor {
return fail("Workspace was not saved before - use \"save as\" command for the first save");
}
File workspaceFile = new File(workspacePath, Workspace.JSON_FILENAME + ".json");
if (!workspaceFile.exists()) {
return fail("Failed to save, " + Workspace.JSON_FILENAME + ".json does not exist, workspace corrupted?");
}
if (!workspaceFile.canWrite()) {
return fail("Can not write " + Workspace.JSON_FILENAME + ".json - permission denied");
}
@ -143,7 +142,7 @@ public class Traqtor extends Executor {
}
traqtor.workspace.setDirty(false);
return done();
}

@ -9,7 +9,7 @@ import link.pagan.traqtor._api.Executor;
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public class Workspace extends Executor {
public class Workspace extends Executor<Workspace> {
public static final String JSON_FILENAME = "workspace";
public static final String DEFAULT_WORKSPACE_NAME = "I'm too lazy to think of a name for this workspace";
@ -58,4 +58,9 @@ public class Workspace extends Executor {
this.dirty = dirty;
}
// @Override
// Workspace self() {
// throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
// }
}

@ -1,14 +1,12 @@
package link.pagan.traqtor.api;
import java.io.IOException;
import link.pagan.traqtor._api.Executor;
import link.pagan.traqtor._api.TraqtorApiTestUtils;
import link.pagan.traqtor._api.result.CommandExecResult;
import static link.pagan.traqtor._api.result.CommandExecResultStatus.DONE;
import static link.pagan.traqtor._api.result.CommandExecResultStatus.FAIL;
import org.junit.jupiter.api.AfterEach;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@ -20,21 +18,15 @@ public class TraqtorTest {
CommandExecResult result;
@BeforeAll
public static void setup() {
Executor.enableParanoindLoggin();
}
@BeforeEach
public void cleanTestDir() throws IOException {
TraqtorApiTestUtils.killTestRoot();
}
@AfterEach
public void killCore() {
Traqtor.reset();
System.out.println("TEST_WORKSPACE_ROOT = " + TraqtorApiTestUtils.TEST_WORKSPACE_ROOT);
}
@Test
@ -43,7 +35,7 @@ public class TraqtorTest {
assertEquals(result.getStatus(), DONE);
assertEquals(Traqtor.getWorkspace().isDirty(), true);
}
@Test
void newWorkspaceSave() {
result = Traqtor.exec(new Traqtor.CreateWorkspace());
@ -52,15 +44,18 @@ public class TraqtorTest {
result = Traqtor.exec(new Traqtor.SaveWorkspace());
assertEquals(FAIL, result.getStatus());
assertEquals(Traqtor.getWorkspace().isDirty(), true);
result = Traqtor.exec(new Traqtor.SaveAsWorkspace(TraqtorApiTestUtils.TEST_WORKSPACE_ROOT));
assertEquals(DONE, result.getStatus());
assertEquals(Traqtor.getWorkspace().isDirty(), false);
}
@Test
void newWorkspaceWithName() {
result = Traqtor.exec(new Traqtor.CreateWorkspace(TraqtorApiTestUtils.TEST_WORKSPACE_NAME));
assertEquals(DONE, result.getStatus());
assertEquals(Traqtor.getWorkspace().isDirty(), true);
}
@Test
void newWorkspaceWithNameAndPath() {
result = Traqtor.exec(new Traqtor.CreateWorkspace(TraqtorApiTestUtils.TEST_WORKSPACE_NAME, TraqtorApiTestUtils.TEST_WORKSPACE_ROOT));

@ -1,20 +1,14 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.schema.data.mapping;
import link.pagan.traqtor.util.Named;
import java.util.List;
import link.pagan.traqtor.schema.data.mapping.MappingEntry;
/**
*
* @author Edward M. Kagan {@literal <}kaganem{@literal @}2pm.tech{@literal >}
*/
public interface MappingSchema extends Named {
public List<MappingEntry> getMappings ();
}

@ -2,8 +2,6 @@ package link.pagan.traqtor.schema.data.mapping.frontend;
import java.util.HashMap;
import link.pagan.traqtor.schema.data.mapping.Mapping;
import link.pagan.traqtor.schema.data.mapping.Mapping;
import link.pagan.traqtor.schema.data.mapping.MappingEntry;
import link.pagan.traqtor.schema.data.mapping.MappingEntry;
/**

@ -1,12 +1,6 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package link.pagan.traqtor.util;
import java.util.Map;
import link.pagan.traqtor.schema.data.mapping.database.DatabaseAdapter;
/**
*

Loading…
Cancel
Save