You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

694 lines
21 KiB

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<ComponentNode> componentNodes = getDynMatrixPanels().getContentNodes();
System.out.println("List: " + componentNodes.size());
List<PANENode> paneList = new ArrayList<PANENode>();
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<NanoPANENode> m_nanoPaneNodeList = null;
public List<NanoPANENode> getNanoPaneNodeList() {
if (m_nanoPaneNodeList == null) {
m_nanoPaneNodeList = new ArrayList<NanoPANENode>();
}
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<Panel> 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<String, PanelInfo> m_panelIDPanelInfoSourceMap = null;
public Hashtable<String, PanelInfo> getPanelIDPanelInfoSourceMap() {
if (m_panelIDPanelInfoSourceMap == null) {
m_panelIDPanelInfoSourceMap = new Hashtable<String, PanelInfo>();
}
return m_panelIDPanelInfoSourceMap;
}
// Hashtable<String, PanelInfo> m_panelIDPanelInfoTargetMap = null;
// public Hashtable<String, PanelInfo> getPanelIDPanelInfoTargetMap() {
// if (m_panelIDPanelInfoTargetMap == null) {
// m_panelIDPanelInfoTargetMap = new Hashtable<String, PanelInfo>();
// }
// 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<Panel> panelList) {
if (panelList != null && panelList.size() > 0) {
System.out.println("Panels: " + panelList.size());
} else {
panelList = new ArrayList<Panel>();
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<67><72>ern Sie die Matrix.");
return;
}
List<PanelInfo> paneInfoList = null;
PaneRepeat paneRepeat = new PaneRepeat();
int panelID = 0;
for (int x = 0; x < matrixX; x++) {
paneInfoList = new ArrayList<PanelInfo>();
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<PaneRepeat> m_paneRepeatList = null;
public List<PaneRepeat> getPaneRepeatList() {
if (m_paneRepeatList == null) {
m_paneRepeatList = new ArrayList<PaneRepeat>();
}
return m_paneRepeatList;
}
private List<PanelInfo> m_panelInfoListSource = null;
public List<PanelInfo> getPanelInfoListSource() {
if (m_panelInfoListSource == null) {
m_panelInfoListSource = new ArrayList<PanelInfo>();
}
return m_panelInfoListSource;
}
// private List<PanelInfo> m_panelInfoListTarget = null;
// public List<PanelInfo> getPanelInfoListTarget() {
// if (m_panelInfoListTarget == null) {
// m_panelInfoListTarget = new ArrayList<PanelInfo>();
// }
// return m_panelInfoListTarget;
// }
/**
* Inner Class
*/
public class PaneRepeat {
private int i_paneRepeatID = 0;
private List<PanelInfo> i_panelInfoList = null;
public int getPaneRepeatID() {
return i_paneRepeatID;
}
public void setPaneRepeatID(int paneRepeatID) {
i_paneRepeatID = paneRepeatID;
}
public List<PanelInfo> getPanelInfoList() {
return i_panelInfoList;
}
public void setPanelInfoList(List<PanelInfo> 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
// ------------------------------------------------------------------------
}