package classes; import java.awt.Point; import java.util.LinkedList; import com.google.gson.annotations.Expose; import javafx.util.Pair; /** * The class "HolonElement" represents any possible element that can be added to * a CpsObject (such as TV (consumer) or any energy source/producer). * * @author Gruppe14 * */ public class HolonElement { /* Name of the gadget */ @Expose private String eleName; /* Quantity */ @Expose private int amount; /* Energy per gadget */ @Expose private float energy; /* If the gadget is working xor not (true xor false) */ @Expose private boolean active; /* Total Energy */ @Expose private float totalEnergy; /* +: for Consumers and -: Producers */ @Expose private char sign; /* Place where the Object is Stored */ @Expose private Pair saving; /* * ID */ @Expose private int id; /* * Flexibility */ @Expose private float flexibility; /* * Active the flexibility field */ @Expose private boolean activeFlex; /* * Energy at each point of the graph with 100 predefined points. At the * beginning, it starts with all values at energy */ private float[] energyAt; // Points on the UnitGraph LinkedList graphPoints; /** * Create a new HolonElement with a user-defined name, amount of the same * element and energy per element. * * @param eleName * String * @param amount * int * @param energy * float */ public HolonElement(String eleName, int amount, float energy) { setEleName(eleName); setAmount(amount); setEnergy(energy); setActive(true); setSign(energy); setEnergyAt(energy); setGraphPoints(new LinkedList()); setId(IdCounterElem.nextId()); setFlexibility(0); setActiveFlex(false); } /** * Create a copy of the HolonElement given each one a new ID. * * @param element * element to copy */ public HolonElement(HolonElement element) { setEleName(element.getEleName()); setAmount(element.getAmount()); setEnergy(element.getEnergy()); setActive(element.getActive()); setSign(element.getEnergy()); setEnergyAt(element.getEnergy()); for (int i = 0; i < energyAt.length; i++) { energyAt[i] = element.getEnergyAt()[i]; } setGraphPoints(new LinkedList()); for (Point p : element.getGraphPoints()) { this.graphPoints.add(new Point((int) p.getX(), (int) p.getY())); } setSaving(null); setId(IdCounterElem.nextId()); setFlexibility(0); setActiveFlex(false); } /** * Get the Array of energy (100 values). * * @return energyAt Array of Floats */ public float[] getEnergyAt() { return energyAt; } /** * Set energy to any value to the whole array. * * @param energy * the value */ public void setEnergyAt(float energy) { this.energyAt = new float[100]; for (int i = 0; i < energyAt.length; i++) { this.energyAt[i] = energy; } } /** * Set energy to any value at a given position. * * @param pos * int * @param energy * float */ public void setEnergyAt(int pos, float energy) { this.energyAt[pos] = energy; } /** * Get the user-defined Name. * * @return the name String */ public String getEleName() { return eleName; } /** * Set the name to any new name. * * @param name * the name to set */ public void setEleName(String name) { this.eleName = name; } /** * Get the actual amount of Elements in the selected Object. * * @return the amount int */ public int getAmount() { return amount; } /** * Set the amount of the Element in the selected Object. * * @param amount * the amount to set */ public void setAmount(int amount) { this.amount = amount; } /** * Get the energy value of the selected Element. * * @return the energy */ public float getEnergy() { return energy; } /** * Set the energy value of the selected Element. * * @param energy * the energy to set */ public void setEnergy(float energy) { this.energy = energy; } /** * Get the Status of the Element (see description of variables). * * @return the active */ public boolean getActive() { return active; } /** * Set the Status of the Element (see description of variables). * * @param active * the active to set */ public void setActive(boolean active) { this.active = active; } /** * Multiply the amount of gadgets, given by the user, and the * consumption/production. If the switch isWorking is turned off for on * gadget, the energy of this gadget have to be subtracted. * * @return totalEnergy (actual) */ public float getTotalEnergy() { if (activeFlex) { totalEnergy = ((float) amount) * (energy + flexibility); } else { totalEnergy = ((float) amount) * energy; } return totalEnergy; } /** * Get the energy value at a selected time x. * * @param x * int * @return energy value */ public float getTotalEnergyAtTimeStep(int x) { float result = 0; if (activeFlex) { result = ((float) amount) * (energyAt[x] + flexibility); } else { result = ((float) amount) * energyAt[x]; } return result; } /** * Get the symbol of the value (see variable description). * * @return the sign */ public char getSign() { return sign; } /** * Set symbol of the value. * * @param energy * the sign to set */ public void setSign(float energy) { if (energy < 0) this.sign = '-'; else this.sign = '+'; } /** * Get the points (values) in the graph. * * @return the Graph Points */ public LinkedList getGraphPoints() { return graphPoints; } /** * Set the points (values) in the graph. * * @param points * the Graph points */ public void setGraphPoints(LinkedList points) { this.graphPoints = points; } /** * Set the flexibility of an element */ public void setFlexibility(float f) { this.flexibility = f; } /** * Get the flexibility of an element */ public float getFlexibility() { return this.flexibility; } /** * Set the flexibility of an element */ public void setActiveFlex(boolean b) { this.activeFlex = b; } /** * Get the flexibility of an element */ public boolean getActiveFlex() { return this.activeFlex; } /** * Set the ID of the HolonElement (one time only). * * @param id * the id */ public void setId(int id) { this.id = id; } /** * Get the Id of the selected HolonElement. * * @return id the id */ public int getId() { return id; } /** * @return the saving */ public Pair getSaving() { return saving; } /** * @param saving * the saving to set */ public void setSaving(Pair saving) { this.saving = saving; } }