package de.nanoleaf.tools.panelconfig; import java.io.Serializable; import java.util.ArrayList; import java.util.Hashtable; import java.util.List; import org.eclnt.editor.annotations.CCGenClass; import org.eclnt.jsfserver.base.faces.event.ActionEvent; import org.eclnt.jsfserver.defaultscreens.OKPopup; import org.eclnt.jsfserver.defaultscreens.Statusbar; import org.eclnt.jsfserver.elements.componentnodes.PANENode; import org.eclnt.jsfserver.elements.events.BaseActionEventDrop; import org.eclnt.jsfserver.elements.events.BaseActionEventInvoke; import org.eclnt.jsfserver.elements.impl.ROWDYNAMICCONTENTBinding; import org.eclnt.jsfserver.elements.impl.ROWDYNAMICCONTENTBinding.ComponentNode; import org.eclnt.jsfserver.elements.util.ValidValuesBinding; import org.eclnt.jsfserver.pagebean.PageBean; import de.examples.components.DragDropPaneBean.PaneInfoTest; import de.examples.components.DragDropPaneBean.PaneRepeat; import de.nanoleaf.server.ColorEnum; import de.nanoleaf.server.NanoleafDeviceServer; import de.tvo.tools.StringUtil; import de.tvo.workplace.DefaultPageBean; import io.github.rowak.nanoleafapi.Panel; import io.github.rowak.nanoleafapi.ShapeType; @CCGenClass (expressionBase="#{d.PanelConfigBean}") public class PanelConfigBean extends DefaultPageBean implements Serializable { public void onSave(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { } public void onLoad(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { } public void onReset(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { clearAll(); } public void onLayoutFile(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { } private void clearAll() { } ValidValuesBinding m_layoutFileVV = new ValidValuesBinding(); public ValidValuesBinding getLayoutFileVV() { return m_layoutFileVV; } String m_layoutFile; public String getLayoutFile() { return m_layoutFile; } public void setLayoutFile(String value) { this.m_layoutFile = value; } public void onCheckZurodnung(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { if (getColor() == null || getColor().equals("#000000") || getColor().equals(getDefaultPanelColor())) { OKPopup.createInstance("Start Zuordnung Farbe", "Bitte w�hlen Sie eine Farbe f�r die Zuordnung der Panels."); m_startZuordnung = false; return; } else { selectNextPanel(); } } public String getLiteral(String key) { return getLiteral("Nanoleaf", key); } private void selectNextPanel() { if (getPanelInfoListSource().size() > 0) { getPanelInfoListSource().get(0).setColor(getColor()); } else { setColor("#000000"); m_startZuordnung = false; } } boolean m_startZuordnung; public boolean getStartZuordnung() { return m_startZuordnung; } public void setStartZuordnung(boolean value) { this.m_startZuordnung = value; } final String m_defaultPanelColor = "#a5a5a5"; public String getDefaultPanelColor() { return m_defaultPanelColor; } String m_color = "#000000"; public String getColor() { return m_color; } public void setColor(String value) { this.m_color = value; } ValidValuesBinding m_colorCombo = new ValidValuesBinding(); public ValidValuesBinding getColorCombo() { return m_colorCombo; } public void onPanelSourceAction(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { //System.out.println(event); BaseActionEventInvoke actionEvent = (BaseActionEventInvoke) event; System.out.println("SourceAction: " + actionEvent.getSourceReference()); // PanelInfo panelInfo = getPanelIDNanoPANENodeSourceMap().get(actionEvent.getSourceReference()); // // if (panelInfo != null) { // Panel panel = panelInfo.getPanel(); // // System.out.println("PanelID: " + panel.getId()); // } } boolean m_nanoleafConnected = false; public boolean getNanoleafConnected() { return m_nanoleafConnected; } public void setNanoleafConnected(boolean value) { this.m_nanoleafConnected = value; } public void onNanoleafDeconnect(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { boolean deconnected = false; // TODO: Pruefen: Host IP Tocken port try { if (getNanoleafDeviceServer() != null) { deconnected = getNanoleafDeviceServer().deConnectNanoLeaf(); } } catch (Exception e) { e.printStackTrace(); } setNanoleafConnected(false); } public void onNanoleafConnect(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { boolean connected = false; // TODO: Pruefen: Host IP Tocken port try { m_nanoleafDeviceServer = new NanoleafDeviceServer(getHostname(), getIpAdresse(), getPort(), getNanoleafToken()); connected = m_nanoleafDeviceServer.connectNanoLeaf(); setAnzahlPanels(m_nanoleafDeviceServer.getNanoLeafPanels().size()); } catch (Exception e) { e.printStackTrace(); } setNanoleafConnected(true); } private NanoleafDeviceServer m_nanoleafDeviceServer = null; public NanoleafDeviceServer getNanoleafDeviceServer() { return m_nanoleafDeviceServer; } ROWDYNAMICCONTENTBinding m_dynMatrixPanels = new ROWDYNAMICCONTENTBinding(); public ROWDYNAMICCONTENTBinding getDynMatrixPanels() { return m_dynMatrixPanels; } public void onPanelsOff(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { List componentNodes = getDynMatrixPanels().getContentNodes(); System.out.println("List: " + componentNodes.size()); List paneList = new ArrayList(); for (ComponentNode componentNode: componentNodes) { System.out.println(componentNode); if (componentNode instanceof PANENode) { paneList.add((PANENode)componentNode); } } } public void onPanelsOn(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { } String m_nanoleafToken = "LAG28BQWrXK2p79NbHMQsvcYYCN1TcD4"; public String getNanoleafToken() { return m_nanoleafToken; } public void setNanoleafToken(String value) { this.m_nanoleafToken = value; } int m_port = 16021; public int getPort() { return m_port; } public void setPort(int value) { this.m_port = value; } String m_ipAdresse = "192.168.178.141"; public String getIpAdresse() { return m_ipAdresse; } public void setIpAdresse(String value) { this.m_ipAdresse = value; } String m_hostname = "Canvas-72FA.fritz.box"; public String getHostname() { return m_hostname; } public void setHostname(String value) { this.m_hostname = value; } private List m_nanoPaneNodeList = null; public List getNanoPaneNodeList() { if (m_nanoPaneNodeList == null) { m_nanoPaneNodeList = new ArrayList(); } return m_nanoPaneNodeList; } public NanoPANENode getNanoPaneNode(int id) { return getNanoPaneNodeList().get(id); } // DYNAMICCONTENTBinding m_dynPanelList = new DYNAMICCONTENTBinding(); // public DYNAMICCONTENTBinding getDynPanelList() { return m_dynPanelList; } public void onPanelsCreate(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { List panelList = null; if (getNanoleafDeviceServer() != null) { panelList = getNanoleafDeviceServer().getNanoLeafPanels(); } // TODO: createPanelsList(panelList); } public void onCheckAndCreate(org.eclnt.jsfserver.base.faces.event.ActionEvent event) { // TODO: createPanelMatrix(getAnzahlPanels(), getMatrixX(), getMatrixY()); } int m_matrixY = 3; public int getMatrixY() { return m_matrixY; } public void setMatrixY(int value) { this.m_matrixY = value; } int m_matrixX = 3; public int getMatrixX() { return m_matrixX; } public void setMatrixX(int value) { this.m_matrixX = value; } int m_anzahlPanels = 1; public int getAnzahlPanels() { return m_anzahlPanels; } public void setAnzahlPanels(int value) { this.m_anzahlPanels = value; } int m_anzahlPanelsMax = 0; public int getAnzahlPanelsMax() { return m_anzahlPanelsMax; } public void setAnzahlPanelsMax(int value) { this.m_anzahlPanelsMax = value; } // ------------------------------------------------------------------------ // inner classes // ------------------------------------------------------------------------ /* Listener to the user of the page bean. */ public interface IListener extends Serializable { } // ------------------------------------------------------------------------ // members // ------------------------------------------------------------------------ private IListener m_listener; // ------------------------------------------------------------------------ // constructors & initialization // ------------------------------------------------------------------------ public PanelConfigBean() { initColorCombo(); } private void initColorCombo() { for (ColorEnum colorEnum: ColorEnum.values()) { getColorCombo().addValidValue(colorEnum.name(), colorEnum.name()); } } Hashtable m_panelIDPanelInfoSourceMap = null; public Hashtable getPanelIDPanelInfoSourceMap() { if (m_panelIDPanelInfoSourceMap == null) { m_panelIDPanelInfoSourceMap = new Hashtable(); } return m_panelIDPanelInfoSourceMap; } // Hashtable m_panelIDPanelInfoTargetMap = null; // public Hashtable getPanelIDPanelInfoTargetMap() { // if (m_panelIDPanelInfoTargetMap == null) { // m_panelIDPanelInfoTargetMap = new Hashtable(); // } // return m_panelIDPanelInfoTargetMap; // } // public NanoPANENode createNanoLeafNanoPANENode(int listNr, Panel panel) { // NanoPANENode nanoPANENode = null; // PanelInfo panelInfo = new PanelInfo(listNr, panel); // Integer panelID = panel.getId(); // // nanoPANENode = new NanoPANENode(panelInfo); // nanoPANENode.setActionListener("#{d.PanelConfigBean.onPanelSourceAction}"); // nanoPANENode.setInvokeevent("click"); // nanoPANENode.setHeight(60); // nanoPANENode.setWidth(60); // nanoPANENode.setBorder("left:2;right:2;top:2;bottom:2;color:#ff0000"); // nanoPANENode.setDragsend("NANOLEAF:" + panelID); // nanoPANENode.setReference(panelID.toString()); // // // // return nanoPANENode; // } private void createPanelsList(List panelList) { if (panelList != null && panelList.size() > 0) { System.out.println("Panels: " + panelList.size()); } else { panelList = new ArrayList(); Panel panel = new Panel(58456, 1, 2, 2, ShapeType.rhythm()); panelList.add(panel); panel = new Panel(43456, 1, 2, 2, ShapeType.rhythm()); panelList.add(panel); } setAnzahlPanels(panelList.size()); PanelInfo panelInfo = null; int panelnr = 0; for (int p = 0; p < panelList.size(); p++) { Panel panel = panelList.get(p); panelInfo = new PanelInfo(panelnr, panel); panelInfo.setColor(getDefaultPanelColor()); panelnr++; getPanelIDPanelInfoSourceMap().put(panelInfo.getPanelNanoleafID()+"", panelInfo); getPanelInfoListSource().add(panelInfo); } } private void createPanelMatrix(int anzahlPanels, int matrixX, int matrixY) { int anzahlPanelMatrix = 0; PanelInfo panelInfo = null; anzahlPanelMatrix = matrixX * matrixY; if (getAnzahlPanels() > anzahlPanelMatrix) { OKPopup.createInstance("Matrix", "Bitte vergr��ern Sie die Matrix."); return; } List paneInfoList = null; PaneRepeat paneRepeat = new PaneRepeat(); int panelID = 0; for (int x = 0; x < matrixX; x++) { paneInfoList = new ArrayList(); paneRepeat = new PaneRepeat(); for (int y = 0; y < matrixY; y++) { panelInfo = new PanelInfo(); panelInfo.setPanelID(panelID); panelInfo.setReference("REF_XY|" + x + "|" + y); panelInfo.setColor(getDefaultPanelColor()); panelInfo.setPanelNanoleafID(panelID); // paneInfoTest.setDrangsendSource("#{d.DragDropPaneBean.onDragSendPaneSource}"); paneInfoList.add(panelInfo); panelID++; } paneRepeat.setPaneRepeatID(x); paneRepeat.setPanelInfoList(paneInfoList); getPaneRepeatList().add(paneRepeat); } } public void onDropPanelActions(ActionEvent event) { if (event instanceof BaseActionEventDrop) { Statusbar.outputSuccess("Drop-Event was processed: " + event.getClass().getName()); BaseActionEventDrop baed = (BaseActionEventDrop)event; String dragInfo = baed.getDragInfo(); System.out.println(baed.getSourceReference()); String ref = baed.getSourceReference(); MatrixInfo matrixInfo = createMatrixInfo(ref); if (matrixInfo != null) { if (dragInfo.startsWith("NANOLEAF:")) { String nanoLeafID = dragInfo.substring("NANOLEAF:".length()); PanelInfo panelInfo = getPanelIDPanelInfoSourceMap().get(nanoLeafID); panelInfo.setColor(getDefaultPanelColor()); getPaneRepeatList().get(matrixInfo.getMatrixX()).getPanelInfoList().set(matrixInfo.getMatrixY(), panelInfo); removeNanoLeafFromSource(nanoLeafID); selectNextPanel(); System.out.println("Source: " + nanoLeafID); System.out.println("Ziel: "); System.out.println("Drop: " + dragInfo); } } } else if (event instanceof BaseActionEventInvoke) { Statusbar.outputSuccess("Cashier Icon was pressed!"); } } private void removeNanoLeafFromSource(String nanoLeafID) { int aktId = 0; int nanoID = 0; nanoID = Integer.parseInt(nanoLeafID); for (int p = 0; p < getPanelInfoListSource().size(); p++) { PanelInfo panelInfo = getPanelInfoListSource().get(p); if (panelInfo.getPanelNanoleafID() == nanoID) { aktId = p; } } getPanelInfoListSource().remove(aktId); getPanelIDPanelInfoSourceMap().remove(nanoLeafID); } private MatrixInfo createMatrixInfo(String ref) { MatrixInfo matrixInfo = null; // #{d.PanelConfigBean.paneRepeatList[1].panelInfoList[2].panelID} int x = -1; int y = -1; int lastPointStart = 0; int lastPointEnde = 0; String lastString = ""; int counterStart = 0; int counterEnde = 0; counterStart = StringUtil.getCountLetter(ref, '['); counterEnde = StringUtil.getCountLetter(ref, ']'); if (counterStart == counterEnde) { for (int p = 0; p < counterStart; p++) { lastPointStart = ref.indexOf("["); lastPointEnde = ref.indexOf("]"); if (x == -1) { lastString = ref.substring(lastPointStart +1, lastPointEnde); x = Integer.parseInt(lastString); //System.out.println("X: " + x); } else { lastString = ref.substring(lastPointStart +1, lastPointEnde); y = Integer.parseInt(lastString); //System.out.println("Y: " + y); } ref = ref.substring(lastPointEnde +1); //System.out.println(ref); } matrixInfo = new MatrixInfo(x, y); } return matrixInfo; } private List m_paneRepeatList = null; public List getPaneRepeatList() { if (m_paneRepeatList == null) { m_paneRepeatList = new ArrayList(); } return m_paneRepeatList; } private List m_panelInfoListSource = null; public List getPanelInfoListSource() { if (m_panelInfoListSource == null) { m_panelInfoListSource = new ArrayList(); } return m_panelInfoListSource; } // private List m_panelInfoListTarget = null; // public List getPanelInfoListTarget() { // if (m_panelInfoListTarget == null) { // m_panelInfoListTarget = new ArrayList(); // } // return m_panelInfoListTarget; // } /** * Inner Class */ public class PaneRepeat { private int i_paneRepeatID = 0; private List i_panelInfoList = null; public int getPaneRepeatID() { return i_paneRepeatID; } public void setPaneRepeatID(int paneRepeatID) { i_paneRepeatID = paneRepeatID; } public List getPanelInfoList() { return i_panelInfoList; } public void setPanelInfoList(List panelInfoList) { i_panelInfoList = panelInfoList; } } public class PanelInfo { String i_reference; public String getReference() { return i_reference; } public void setReference(String value) { this.i_reference = value; } String i_color; public String getColor() { return i_color; } public void setColor(String value) { this.i_color = value; createBorder(); } String i_drangsendSource; public String getDrangsendSource() { return i_drangsendSource; } public void setDrangsendSource(String value) { this.i_drangsendSource = value; } int m_panelID = 0; int m_panelNanoleafID = 0; int m_panelMatrixPosX = 0; int m_panelMatrixPosY = 0; String m_panelColor = null; boolean m_panelActiv = true; boolean m_panelInit = false; Panel m_panel; String m_border = null; public PanelInfo() { } public void createBorder() { String border = null; if (getColor().equals(getDefaultPanelColor())) { border = "left:1;right:1;top:1;bottom:1;color:" + getColor(); } else { border = "left:3;right:3;top:3;bottom:3;color:" + getColor(); } setBorder(border); } public PanelInfo(int panelnr, Panel panel) { this.m_panelID = panelnr; this.m_panel = panel; this.m_panelNanoleafID = panel.getId(); this.m_panelMatrixPosX = panel.getX(); this.m_panelMatrixPosY = panel.getY(); this.i_drangsendSource = "NANOLEAF:" + getPanelNanoleafID(); } public int getPanelID() { return m_panelID; } public void setPanelID(int panelID) { m_panelID = panelID; } public int getPanelNanoleafID() { return m_panelNanoleafID; } public void setPanelNanoleafID(int panelNanoleafID) { m_panelNanoleafID = panelNanoleafID; } public int getPanelMatrixPosX() { return m_panelMatrixPosX; } public void setPanelMatrixPosX(int panelMatrixPosX) { m_panelMatrixPosX = panelMatrixPosX; } public int getPanelMatrixPosY() { return m_panelMatrixPosY; } public void setPanelMatrixPosY(int panelMatrixPosY) { m_panelMatrixPosY = panelMatrixPosY; } public String getPanelColor() { return m_panelColor; } public void setPanelColor(String panelColor) { m_panelColor = panelColor; } public boolean getPanelActiv() { return m_panelActiv; } public void setPanelActiv(boolean panelActiv) { m_panelActiv = panelActiv; } public boolean getPanelInit() { return m_panelInit; } public void setPanelInit(boolean panelInit) { m_panelInit = panelInit; } public Panel getPanel() { return m_panel; } public String getBorder() { return m_border; } public void setBorder(String border) { m_border = border; } } @Override public String getPageName() { return "/nanoleaf/tools/panelconfig/panelconfig.xml"; } @Override public String getRootExpressionUsedInPage() { return "#{d.PanelConfigBean}"; } // ------------------------------------------------------------------------ // public usage // ------------------------------------------------------------------------ /* Initialization of the bean. Add any parameter that is required within your scenario. */ public void prepare(IListener listener) { m_listener = listener; } // ------------------------------------------------------------------------ // private usage // ------------------------------------------------------------------------ }