Add model classes
This commit is contained in:
commit
67de8513ea
|
@ -0,0 +1,29 @@
|
|||
### IntelliJ IDEA ###
|
||||
out/
|
||||
!**/src/main/**/out/
|
||||
!**/src/test/**/out/
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
bin/
|
||||
!**/src/main/**/bin/
|
||||
!**/src/test/**/bin/
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
|
@ -0,0 +1,8 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/tp01.iml" filepath="$PROJECT_DIR$/tp01.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,42 @@
|
|||
package model;
|
||||
|
||||
public abstract class Building {
|
||||
private final int id;
|
||||
private final String type;
|
||||
private final int x;
|
||||
private final int y;
|
||||
private BuildingState state = BuildingState.EMPTY;
|
||||
|
||||
protected Building(int id, String type, int x, int y) {
|
||||
this.id = id;
|
||||
this.type = type;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public abstract void processInput(Component input);
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
public int getY() {
|
||||
return y;
|
||||
}
|
||||
|
||||
public BuildingState getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(BuildingState state) {
|
||||
this.state = state;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package model;
|
||||
|
||||
public enum BuildingState {
|
||||
EMPTY,
|
||||
ONE_THIRD,
|
||||
TWO_THIRD,
|
||||
FULL
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package model;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
// TODO WN: Check if we can use records
|
||||
|
||||
public class Component {
|
||||
private final ComponentType type;
|
||||
|
||||
public Component(ComponentType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public ComponentType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Component component = (Component) o;
|
||||
return type == component.type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Component{" +
|
||||
"type=" + type +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package model;
|
||||
|
||||
public class ComponentRoute {
|
||||
private final Building outputBuilding;
|
||||
|
||||
public ComponentRoute(Building outputBuilding) {
|
||||
this.outputBuilding = outputBuilding;
|
||||
}
|
||||
|
||||
public void sendComponent(Component component) {
|
||||
}
|
||||
|
||||
private void outputComponent(Component component) {
|
||||
outputBuilding.processInput(component);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package model;
|
||||
|
||||
public enum ComponentType {
|
||||
METAL,
|
||||
MOTOR,
|
||||
PLANE,
|
||||
WING
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package model;
|
||||
|
||||
public class Factory extends Building {
|
||||
public Factory(int id, String type, int x, int y) {
|
||||
super(id, type, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processInput(Component input) {
|
||||
}
|
||||
|
||||
private void buildComponent() {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package model;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class Route {
|
||||
private final int from;
|
||||
private final int to;
|
||||
|
||||
public Route(int from, int to) {
|
||||
this.from = from;
|
||||
this.to = to;
|
||||
}
|
||||
|
||||
public int getFrom() {
|
||||
return from;
|
||||
}
|
||||
|
||||
public int getTo() {
|
||||
return to;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Route route = (Route) o;
|
||||
return from == route.from && to == route.to;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(from, to);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Route{" +
|
||||
"from=" + from +
|
||||
", to=" + to +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package model;
|
||||
|
||||
public class Warehouse extends Building {
|
||||
protected Warehouse(int id, String type, int x, int y) {
|
||||
super(id, type, x, y);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processInput(Component input) {
|
||||
}
|
||||
|
||||
private void sellComponent() {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package model.metadata;
|
||||
|
||||
import model.BuildingState;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public abstract class BuildingMetadata {
|
||||
private final String type;
|
||||
private final Map<BuildingState, String> iconsPaths;
|
||||
|
||||
public BuildingMetadata(String type, Map<BuildingState, String> iconsPaths) {
|
||||
this.type = type;
|
||||
this.iconsPaths = iconsPaths;
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public Map<BuildingState, String> getIconsPaths() {
|
||||
return iconsPaths;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
BuildingMetadata that = (BuildingMetadata) o;
|
||||
return type.equals(that.type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "BuildingMetadata{" +
|
||||
"type='" + type + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package model.metadata;
|
||||
|
||||
import model.ComponentType;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class FactoryInput {
|
||||
private final ComponentType type;
|
||||
private final int quantity;
|
||||
|
||||
public FactoryInput(ComponentType type, int quantity) {
|
||||
this.type = type;
|
||||
this.quantity = quantity;
|
||||
}
|
||||
|
||||
public ComponentType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getQuantity() {
|
||||
return quantity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
FactoryInput that = (FactoryInput) o;
|
||||
return quantity == that.quantity && type == that.type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(type, quantity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "FactoryInput{" +
|
||||
"type=" + type +
|
||||
", quantity=" + quantity +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
package model.metadata;
|
||||
|
||||
import model.BuildingState;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class FactoryMetadata extends BuildingMetadata {
|
||||
private final int productionInterval;
|
||||
private final Collection<FactoryInput> inputs;
|
||||
private final FactoryOutput output;
|
||||
|
||||
public FactoryMetadata(String type, Map<BuildingState, String> iconsPaths, int productionInterval, Collection<FactoryInput> inputs, FactoryOutput output) {
|
||||
super(type, iconsPaths);
|
||||
this.productionInterval = productionInterval;
|
||||
this.inputs = inputs;
|
||||
this.output = output;
|
||||
}
|
||||
|
||||
public int getProductionInterval() {
|
||||
return productionInterval;
|
||||
}
|
||||
|
||||
public Collection<FactoryInput> getInputs() {
|
||||
return inputs;
|
||||
}
|
||||
|
||||
public FactoryOutput getOutput() {
|
||||
return output;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
FactoryMetadata that = (FactoryMetadata) o;
|
||||
return productionInterval == that.productionInterval && inputs.equals(that.inputs) && output.equals(that.output);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(super.hashCode(), productionInterval, inputs, output);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "FactoryMetadata{" +
|
||||
"productionInterval=" + productionInterval +
|
||||
", inputs=" + inputs +
|
||||
", output=" + output +
|
||||
"} " + super.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package model.metadata;
|
||||
|
||||
import model.ComponentType;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class FactoryOutput {
|
||||
private final ComponentType type;
|
||||
|
||||
public FactoryOutput(ComponentType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public ComponentType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
FactoryOutput that = (FactoryOutput) o;
|
||||
return type == that.type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "FactoryOutput{" +
|
||||
"type=" + type +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
package model.metadata;
|
||||
|
||||
import model.ComponentType;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class WarehouseInput {
|
||||
private final ComponentType type;
|
||||
private final int capacity;
|
||||
|
||||
public WarehouseInput(ComponentType type, int capacity) {
|
||||
this.type = type;
|
||||
this.capacity = capacity;
|
||||
}
|
||||
|
||||
public ComponentType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getCapacity() {
|
||||
return capacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
WarehouseInput that = (WarehouseInput) o;
|
||||
return capacity == that.capacity && type == that.type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(type, capacity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WarehouseInput{" +
|
||||
"type=" + type +
|
||||
", capacity=" + capacity +
|
||||
'}';
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package model.metadata;
|
||||
|
||||
import model.BuildingState;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class WarehouseMetadata extends BuildingMetadata {
|
||||
private final WarehouseInput input;
|
||||
|
||||
public WarehouseMetadata(String type, Map<BuildingState, String> iconsPaths, WarehouseInput input) {
|
||||
super(type, iconsPaths);
|
||||
this.input = input;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
WarehouseMetadata that = (WarehouseMetadata) o;
|
||||
return input.equals(that.input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(super.hashCode(), input);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WarehouseMetadata{" +
|
||||
"input=" + input +
|
||||
"} " + super.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
Loading…
Reference in New Issue