Skip to content

Commit

Permalink
update!: changed GetDaxConn to cast a returned DaxConn (#16)
Browse files Browse the repository at this point in the history
  • Loading branch information
sttk committed May 13, 2023
1 parent b9075e5 commit 197b972
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 65 deletions.
3 changes: 2 additions & 1 deletion src/main/java/sabi/Dax.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ public interface Dax {
* name.
*
* @param name The name of {@link DaxConn} or {@link DaxSrc}.
* @param cls The class object of cast destination.
* @return A {@link DaxConn} object.
* @throws Err If failing to get {@link DaxConn}.
*/
DaxConn getDaxConn(final String name) throws Err;
<C extends DaxConn> C getDaxConn(String name, Class<C> cls) throws Err;
}
24 changes: 23 additions & 1 deletion src/main/java/sabi/DaxBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,17 @@ public record DaxSrcIsNotFound(String name) {};
*/
public record FailToCreateDaxConn(String name) {};

/**
* An error reason which indicates that it is failed to cast type of a
* DaxConn.
*
* @param name A registered name of a {@link DaxSrc} which created the
* target {@link DaxConn}.
* @param fromType The type of the source {@link DaxConn}
* @param toType The type of the destination {@link DaxConn}
*/
public record FailToCastDaxConn(String name, String fromType, String toType) {};

/**
* An error reason which indicates that some connections failed to commit.
*
Expand Down Expand Up @@ -204,7 +215,18 @@ public synchronized void freeAllLocalDaxSrcs() {
* If {@link DaxSrc} with the specified name is not found.</li>
* </ul>
*/
public DaxConn getDaxConn(final String name) throws Err {
public <C extends DaxConn> C getDaxConn(final String name, final Class<C> cls) throws Err {
var conn = _getDaxConn(name);
try {
return cls.cast(conn);
} catch (Exception e) {
var from = conn != null ? conn.getClass().getName() : null;
var to = cls.getName();
throw new Err(new FailToCastDaxConn(name, from, to), e);
}
}

private DaxConn _getDaxConn(final String name) throws Err {
var conn = this.daxConnMap.get(name);
if (conn != null) {
return conn;
Expand Down
46 changes: 9 additions & 37 deletions src/test/java/sabi/DaxDummyForTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -169,13 +169,6 @@ public void close() {
}
}

static interface MapDax extends Dax {
default MapDaxConn getMapDaxConn(String name) throws Err {
var conn = getDaxConn(name);
return MapDaxConn.class.cast(conn);
}
}

static interface HogeFugaDax extends Dax {
String getHogeData() throws Err;
void setFugaData(String data) throws Err;
Expand All @@ -202,41 +195,41 @@ public void run(FugaPiyoDax dax) throws Err {
}
}

static interface HogeDax extends MapDax, HogeFugaDax {
static interface HogeDax extends Dax, HogeFugaDax {
default String getHogeData() throws Err {
var conn = getMapDaxConn("hoge");
var conn = getDaxConn("hoge", MapDaxConn.class);
var data = conn.dataMap.get("hogehoge");
return data;
}

default void SetHogeData(String data) throws Err {
var conn = getMapDaxConn("hoge");
var conn = getDaxConn("hoge", MapDaxConn.class);
conn.dataMap.put("hogehoge", data);
}
}

static interface FugaDax extends MapDax, HogeFugaDax, FugaPiyoDax {
static interface FugaDax extends Dax, HogeFugaDax, FugaPiyoDax {
default String getFugaData() throws Err {
var conn = getMapDaxConn("fuga");
var conn = getDaxConn("fuga", MapDaxConn.class);
var data = conn.dataMap.get("fugafuga");
return data;
}

default void setFugaData(String data) throws Err {
var conn = getMapDaxConn("fuga");
var conn = getDaxConn("fuga", MapDaxConn.class);
conn.dataMap.put("fugafuga", data);
}
}

static interface PiyoDax extends MapDax, FugaPiyoDax {
static interface PiyoDax extends Dax, FugaPiyoDax {
default String getPiyoData() throws Err {
var conn = getMapDaxConn("piyo");
var conn = getDaxConn("piyo", MapDaxConn.class);
var data = conn.dataMap.get("piyopiyo");
return data;
}

default void setPiyoData(String data) throws Err {
var conn = getMapDaxConn("piyo");
var conn = getDaxConn("piyo", MapDaxConn.class);
conn.dataMap.put("piyopiyo", data);
}
}
Expand Down Expand Up @@ -285,13 +278,6 @@ public void close() {
}
}

static interface ADax extends Dax {
default ADaxConn getADaxConn(String name) throws Err {
var conn = getDaxConn(name);
return ADaxConn.class.cast(conn);
}
}

static class BDaxSrc implements DaxSrc {
final Map<String, String> bMap = new HashMap<>();

Expand Down Expand Up @@ -338,13 +324,6 @@ public void close() {
}
}

static interface BDax extends Dax {
default BDaxConn getBDaxConn(String name) throws Err {
var conn = getDaxConn(name);
return BDaxConn.class.cast(conn);
}
}

static class CDaxSrc implements DaxSrc {
final Map<String, String> cMap = new HashMap<>();

Expand Down Expand Up @@ -384,11 +363,4 @@ public void close() {
logs.add("CDaxConn#close");
}
}

static interface CDax extends Dax {
default CDaxConn getCDaxConn(String name) throws Err {
var conn = getDaxConn(name);
return CDaxConn.class.cast(conn);
}
}
}
38 changes: 19 additions & 19 deletions src/test/java/sabi/DaxTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ void should_get_dax_conn_of_local_dax_src() throws Exception {
var base = new DaxBase() {};

try {
var conn = base.getDaxConn("foo");
base.getDaxConn("foo", FooDaxConn.class);
fail();
} catch (Err e) {
var r = DaxBase.DaxSrcIsNotFound.class.cast(e.getReason());
Expand All @@ -414,7 +414,7 @@ void should_get_dax_conn_of_local_dax_src() throws Exception {
}

try {
var conn = base.getDaxConn("foo");
base.getDaxConn("foo", FooDaxConn.class);
fail();
} catch (Err e) {
var r = DaxBase.DaxSrcIsNotFound.class.cast(e.getReason());
Expand All @@ -427,9 +427,9 @@ void should_get_dax_conn_of_local_dax_src() throws Exception {
fail(e);
}

var conn = base.getDaxConn("foo");
var conn = base.getDaxConn("foo", FooDaxConn.class);

var conn2 = base.getDaxConn("foo");
var conn2 = base.getDaxConn("foo", FooDaxConn.class);
assertThat(conn2).isEqualTo(conn);
}

Expand All @@ -438,7 +438,7 @@ void should_get_dax_conn_of_global_dax_src() throws Exception {
var base = new DaxBase() {};

try {
var conn = base.getDaxConn("foo");
base.getDaxConn("foo", FooDaxConn.class);
fail();
} catch (Err e) {
var r = DaxBase.DaxSrcIsNotFound.class.cast(e.getReason());
Expand All @@ -453,9 +453,9 @@ void should_get_dax_conn_of_global_dax_src() throws Exception {
fail(e);
}

var conn = base.getDaxConn("foo");
var conn = base.getDaxConn("foo", FooDaxConn.class);

var conn2 = base.getDaxConn("foo");
var conn2 = base.getDaxConn("foo", FooDaxConn.class);
assertThat(conn2).isEqualTo(conn);
}

Expand All @@ -464,7 +464,7 @@ void should_take_priority_of_local_ds_than_global_ds() throws Exception {
var base = new DaxBase() {};

try {
var conn = base.getDaxConn("foo");
base.getDaxConn("foo", FooDaxConn.class);
fail();
} catch (Err e) {
var r = DaxBase.DaxSrcIsNotFound.class.cast(e.getReason());
Expand All @@ -485,9 +485,9 @@ void should_take_priority_of_local_ds_than_global_ds() throws Exception {
fail(e);
}

var conn = base.getDaxConn("foo");
var conn = base.getDaxConn("foo", FooDaxConn.class);

var conn2 = base.getDaxConn("foo");
var conn2 = base.getDaxConn("foo", FooDaxConn.class);
assertThat(conn2).isEqualTo(conn);
}

Expand All @@ -504,7 +504,7 @@ void should_fail_to_create_dax_conn() throws Exception {
}

try {
base.getDaxConn("foo");
base.getDaxConn("foo", FooDaxConn.class);
fail();
} catch (Err e) {
var r = DaxBase.FailToCreateDaxConn.class.cast(e.getReason());
Expand Down Expand Up @@ -533,14 +533,14 @@ void should_commit() throws Exception {
base.begin();

try {
var conn = base.getDaxConn("foo");
var conn = base.getDaxConn("foo", FooDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
}

try {
var conn = base.getDaxConn("bar");
var conn = base.getDaxConn("bar", BarDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
Expand Down Expand Up @@ -587,14 +587,14 @@ void should_fail_to_commit() throws Exception {
base.begin();

try {
var conn = base.getDaxConn("foo");
var conn = base.getDaxConn("foo", FooDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
}

try {
var conn = base.getDaxConn("bar");
var conn = base.getDaxConn("bar", BarDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
Expand Down Expand Up @@ -636,14 +636,14 @@ void should_rollback() throws Exception {
base.begin();

try {
var conn = base.getDaxConn("foo");
var conn = base.getDaxConn("foo", FooDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
}

try {
var conn = base.getDaxConn("bar");
var conn = base.getDaxConn("bar", BarDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
Expand Down Expand Up @@ -684,14 +684,14 @@ void should_end() throws Exception {
base.begin();

try {
var conn = base.getDaxConn("foo");
var conn = base.getDaxConn("foo", FooDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
}

try {
var conn = base.getDaxConn("bar");
var conn = base.getDaxConn("bar", BarDaxConn.class);
assertThat(conn).isNotNull();
} catch (Err e) {
fail(e);
Expand Down
14 changes: 7 additions & 7 deletions src/test/java/sabi/TxnTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,30 +21,30 @@ static interface ABDax {
void setBData(String data) throws Err;
}

static interface AGetDax extends ABDax, ADax {
static interface AGetDax extends ABDax, Dax {
default String getAData() throws Err {
var conn = getADaxConn("aaa");
var conn = getDaxConn("aaa", ADaxConn.class);
var data = conn.aMap.get("a");
return data;
}
}

static interface BGetSetDax extends ABDax, BDax {
static interface BGetSetDax extends ABDax, Dax {
default String getBData() throws Err {
var conn = getBDaxConn("bbb");
var conn = getDaxConn("bbb", BDaxConn.class);
var data = conn.bMap.get("b");
return data;
}

default void setBData(String data) throws Err {
var conn = getBDaxConn("bbb");
var conn = getDaxConn("bbb", BDaxConn.class);
conn.bMap.put("b", data);
}
}

static interface CSetDax extends ABDax, CDax {
static interface CSetDax extends ABDax, Dax {
default void setCData(String data) throws Err {
var conn = getCDaxConn("ccc");
var conn = getDaxConn("ccc", CDaxConn.class);
conn.cMap.put("c", data);
}
}
Expand Down

0 comments on commit 197b972

Please sign in to comment.