diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/FloorModelData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/FloorModelData.java new file mode 100644 index 0000000000000000000000000000000000000000..bb523d1167bc8e1329e32216289742117bda485c --- /dev/null +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/FloorModelData.java @@ -0,0 +1,104 @@ +/** + * Copyright 2017 - 2018 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.syncleus.aethermud.storage.graphdb.model; + +import com.google.common.collect.Sets; +import com.syncleus.aethermud.storage.graphdb.DataUtils; +import com.syncleus.ferma.annotations.Adjacency; +import com.syncleus.ferma.annotations.GraphElement; +import com.syncleus.ferma.ext.AbstractInterceptingVertexFrame; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.tinkerpop.gremlin.structure.Direction; +import com.syncleus.aethermud.world.model.RoomModelData; + +import java.lang.reflect.InvocationTargetException; +import java.util.*; + +@GraphElement +public abstract class FloorModelData extends AbstractInterceptingVertexFrame { + + @Adjacency(label = "roomModel", direction = Direction.OUT) + public abstract RoomModelData addRoomModelData(RoomModelData roomModels); + + @Adjacency(label = "roomModel", direction = Direction.OUT) + public abstract void removeRoomModelData(RoomModelData stats); + + @Adjacency(label = "roomModel", direction = Direction.OUT) + public abstract <N extends RoomModelData> Iterator<? extends N> getRoomModelDatasIterator(Class<? extends N> type); + + public Set<RoomModelData> getRoomModelDatas() { + return Collections.unmodifiableSet(Sets.newHashSet(this.getRoomModelDatasIterator(RoomModelData.class))); + } + + public void setRoomModelDatas(Set<RoomModelData> roomModels) { + DataUtils.setAllElements(roomModels, () -> this.getRoomModelDatasIterator(RoomModelData.class), roomModelData -> this.addRoomModelData(roomModelData), () -> {} ); + } + + public RoomModelData createRoomModelData() { + final RoomModelData roomModel = this.getGraph().addFramedVertex(RoomModelData.class); + this.addEffectData(roomModel); + return roomModel; + } + + @Property("rawMatrixCsv") + public abstract String getRawMatrixCsv(); + + @Property("rawMatrixCsv") + public abstract void setRawMatrixCsv(String rawMatrixCsv); + + @Property("name") + public abstract String getName(); + + @Property("name") + public abstract void setName(String name); + + @Property("id") + public abstract Integer getId(); + + @Property("id") + public abstract void setId(Integer id); + + public static void copyFloorModel(FloorModelData dest, FloorModel src) { + try { + PropertyUtils.copyProperties(dest, src); + + for(RoomModelData data : dest.getRoomModelDatas()) + data.remove(); + if( src.getRoomModelDatas() != null ) + for(RoomModelData roomModelData : src.getRoomModelDatas()) + RoomModelData.copyFloorModel(dest.createRoomModelData(), roomModelData); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties", e); + } + } + + public static FloorModel copyFloorModel(FloorModelData src) { + FloorModel retVal = new FloorModel(); + try { + PropertyUtils.copyProperties(retVal, src); + + Set<RoomModel> roomModels = new HashSet<>(); + if( src.getRoomModelDatas() != null ) + for(RoomModelData roomModelData : src.getRoomModelDatas()) + roomModels.add(RoomModelData.copyRoomModel(roomModelData)); + retVal.setRoomModels(Collections.unmodifiableSet(roomModels)); + + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties", e); + } + return retVal; + } +} diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/RoomModelData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/RoomModelData.java new file mode 100644 index 0000000000000000000000000000000000000000..d708a91429704732fb4a1b9b648d4e437e8a4163 --- /dev/null +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/RoomModelData.java @@ -0,0 +1,97 @@ +/** + * Copyright 2017 - 2018 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.syncleus.aethermud.storage.graphdb.model; + +import com.syncleus.aethermud.storage.graphdb.DataUtils; +import com.syncleus.ferma.annotations.GraphElement; +import com.syncleus.ferma.ext.AbstractInterceptingVertexFrame; +import org.apache.commons.beanutils.PropertyUtils; + +import java.lang.reflect.InvocationTargetException; +import java.util.Map; +import java.util.Set; + + +@GraphElement +public abstract class RoomModelData extends AbstractInterceptingVertexFrame { + + @Property("areaNames") + public Set<String> getAreaNames(); + + @Property("areaNames") + public void setAreaNames(Set<String> areaNames); + + @Property("floorId") + public int getFloorId(); + + @Property("floorId") + public void setFloorId(int floorId); + + @Property("roomTags") + public Set<String> getRoomTags(); + + @Property("roomTags") + public void setRoomTags(Set<String> roomTags); + + @Property("roomId") + public int getRoomId(); + + @Property("roomId") + public void setRoomId(int roomId); + + @Property("roomDescription") + public String getRoomDescription(); + + @Property("roomDescription") + public void setRoomDescription(String roomDescription); + + @Property("roomTitle") + public String getRoomTitle(); + + @Property("roomTitle") + public void setRoomTitle(String roomTitle); + + @Property("enterExitNames") + public Map<String, String> getEnterExitNames(); + + @Property("enterExitNames") + public void setEnterExitNames(Map<String, String> enterExitNames); + + @Property("notables") + public Map<String, String> getNotables(); + + @Property("notables") + public void setNotables(Map<String, String> notables); + + + public static void copyRoomModel(RoomModelData dest, RoomModel src) { + try { + PropertyUtils.copyProperties(dest, src); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties", e); + } + } + + public static RoomModel copyRoomModel(RoomModelData src) { + RoomModel retVal = new RoomModel(); + try { + PropertyUtils.copyProperties(retVal, src); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties", e); + } + return retVal; + } +} diff --git a/src/main/java/com/syncleus/aethermud/storage/graphdb/model/WorldModelData.java b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/WorldModelData.java new file mode 100644 index 0000000000000000000000000000000000000000..a5cf004b05430ed4a1d397e026b4250676e09747 --- /dev/null +++ b/src/main/java/com/syncleus/aethermud/storage/graphdb/model/WorldModelData.java @@ -0,0 +1,85 @@ +/** + * Copyright 2017 - 2018 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.syncleus.aethermud.storage.graphdb.model; + +import com.google.common.collect.Sets; +import com.syncleus.aethermud.storage.graphdb.DataUtils; +import com.syncleus.ferma.annotations.Adjacency; +import com.syncleus.ferma.annotations.GraphElement; +import com.syncleus.ferma.ext.AbstractInterceptingVertexFrame; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.tinkerpop.gremlin.structure.Direction; +import com.syncleus.aethermud.world.model.FloorModelData; + +import java.lang.reflect.InvocationTargetException; +import java.util.*; + +@GraphElement +public abstract class WorldModelData extends AbstractInterceptingVertexFrame { + @Adjacency(label = "floorModel", direction = Direction.OUT) + public abstract FloorModelData addFloorModelData(FloorModelData floorModels); + + @Adjacency(label = "floorModel", direction = Direction.OUT) + public abstract void removeFloorModelData(FloorModelData stats); + + @Adjacency(label = "floorModel", direction = Direction.OUT) + public abstract <N extends FloorModelData> Iterator<? extends N> getFloorModelDatasIterator(Class<? extends N> type); + + public Set<FloorModelData> getFloorModelDatas() { + return Collections.unmodifiableSet(Sets.newHashSet(this.getFloorModelDatasIterator(FloorModelData.class))); + } + + public void setFloorModelDatas(Set<FloorModelData> floorModels) { + DataUtils.setAllElements(floorModels, () -> this.getFloorModelDatasIterator(FloorModelData.class), floorModelData -> this.addFloorModelData(floorModelData), () -> {} ); + } + + public FloorModelData createFloorModelData() { + final FloorModelData floorModel = this.getGraph().addFramedVertex(FloorModelData.class); + this.addEffectData(floorModel); + return floorModel; + } + + public static void copyWorldModel(WorldModelData dest, WorldModel src) { + try { + PropertyUtils.copyProperties(dest, src); + + for(FloorModelData data : dest.getFloorModelDatas()) + data.remove(); + if( src.getFloorModelDatas() != null ) + for(FloorModelData floorModelData : src.getFloorModelDatas()) + FloorModelData.copyFloorModel(dest.createFloorModelData(), floorModelData); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties", e); + } + } + + public static WorldModel copyWorldModel(WorldModelData src) { + WorldModel retVal = new WorldModel(); + try { + PropertyUtils.copyProperties(retVal, src); + + Set<FloorModel> floorModels = new HashSet<>(); + if( src.getFloorModelDatas() != null ) + for(FloorModelData floorModelData : src.getFloorModelDatas()) + floorModels.add(FloorModelData.copyFloorModel(floorModelData)); + retVal.setFloorModels(Collections.unmodifiableSet(floorModels)); + + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + throw new IllegalStateException("Could not copy properties", e); + } + return retVal; + } +}