/** * Generates a crude sitemap from our generated items. * * @throws IOException * @throws OmniNotConnectedException * @throws OmniInvalidResponseException * @throws OmniUnknownMessageTypeException */ private void generateSiteMap() throws IOException, OmniNotConnectedException, OmniInvalidResponseException, OmniUnknownMessageTypeException { StringBuilder output = new StringBuilder(); // begin sitemap output.append("sitemap home label=\"Main Menu\"{\n"); output.append("Frame {\n\n"); // begin lights output.append("Text label=\"Lights\"icon=\"" + IMG_LIGHT + "\" {\n"); output.append("Frame {\n"); for (String room : rooms.keySet()) { LinkedList<SiteItem> units = rooms.get(room); SiteItem fLight = units.removeFirst(); output.append( String.format( "Text label=\"%s [%%s]\" item=%s_String icon=\"%s\" valuecolor=[==Off=\"white\",!=Off=\"green\"]{\n", fLight.getObjName(), fLight.getName(), IMG_LIGHT)); output.append( String.format( "Frame item=%s_Switch label=\"%s [%%s%%%%]\"{\n", fLight.getName(), fLight.getObjName())); output.append( String.format( "Switch item=%s_Switch label=\"Power\" icon=\"\" mappings=[\"0\"=Off, \"100\"=On]\n", fLight.getName())); output.append( String.format("Slider item=%s_Switch label=\"Dimmer\" icon=\"\"\n", fLight.getName())); output.append( String.format( "Switch item=%s_String label=\"Scene\" icon=\"\" mappings=[\"Scene A\"=A, \"Scene B\"=B, \"Scene C\"=C, \"Scene D\"=D]\n", fLight.getName())); output.append("}\nFrame label=\"All Lights\"{\n"); for (SiteItem l : units) { output.append(String.format("Slider item=%s_Switch switchSupport\n", l.getName())); } output.append("}\n}\n"); } if (lights.size() > 0) { output.append("Text label=\"Other\" {\n"); output.append("Frame{\n"); for (SiteItem l : lights) { output.append(String.format("Slider item=%s_Switch switchSupport\n", l.getName())); } output.append("}\n}\n"); } // end lights output.append("}\n}\n"); // begin thermos if (thermos.size() > 0) { output.append("Text label=\"Thermostats\"icon=\"" + IMG_THERMOS + "\" {\n"); output.append("Frame {\n"); for (SiteItem thermo : thermos) { output.append( String.format( "Text label=\"%s [%%d°F]\" item=%s_Temp icon=\"%s\" {\n", thermo.getObjName(), thermo.getName(), IMG_THERMOS)); output.append( String.format( "Frame item=%s_Temp label=\"%s [%%d°F]\"{\n", thermo.getName(), thermo.getObjName())); output.append( String.format( "Setpoint item=%s_CoolPoint minValue=32 maxValue=100 step=1\n icon=\"%s-cool\"", thermo.getName(), IMG_THERMOS)); output.append( String.format( "Setpoint item=%s_HeatPoint minValue=32 maxValue=100 step=1\n icon=\"%s-heat\"", thermo.getName(), IMG_THERMOS)); output.append( String.format( "Switch item=%s_System label=\"Mode\" icon=\"%s\" mappings=[\"0\"=Off, \"1\"=Heat, \"2\"=Cool,\"3\"=Auto,\"4\"=Emer]\n", thermo.getName(), IMG_THERMOS)); output.append( String.format( "Switch item=%s_Fan label=\"Fan\" mappings=[\"0\"=Auto, \"1\"=On]\n", thermo.getName())); output.append( String.format( "Switch item=%s_Hold label=\"Hold\" mappings=[\"0\"=Off, \"1\"=On]\n", thermo.getName())); output.append("}\n}\n"); } // end thermos output.append("}\n}\n"); } // begin audioZones if (audioZones.size() > 0) { output.append("Text label=\"Audio\" icon=\"" + IMG_AUDIO + "\"{\n"); output.append("Frame {\n"); for (SiteItem audio : audioZones) { output.append( String.format( "Text label=\"%s [%%s]\" item=%s_Power icon=\"%s\" valuecolor=[==OFF=\"white\",!=OFF=\"green\"]{\n", audio.getObjName(), audio.getName(), IMG_AUDIO)); output.append( String.format( "Frame item=%s_Volume label=\"%s [%%s%%%%]\"{\n", audio.getName(), audio.getObjName())); output.append( String.format("Switch item=%s_Power icon=\"\" label=\"Power\"\n", audio.getName())); output.append( String.format("Switch item=%s_Mute icon=\"\" label=\"Mute\"\n", audio.getName())); output.append( String.format( "Switch item=%s_Source icon=\"\" label=\"Source\" mappings=[\"1\"=XM, \"2\"=iPod, \"3\"=Tivo,\"4\"=Sqz1,\"5\"=Air,\"6\"=Sqz2]\n", audio.getName())); output.append( String.format("Slider item=%s_Volume icon=\"\" label=\"Volume\"\n", audio.getName())); int[] features = c.reqSystemFeatures().getFeatures(); String[] audioCmd = null; for (int i = 0; i < features.length; i++) { switch (features[i]) { case 1: // Nuvo Concerto case 2: // Nuvo Essentials/Simplese audioCmd = AUDIOCMD_NUVO; break; case 3: // Nuvo Grand audioCmd = AUDIOCMD_NUVOGRAND; break; case 4: // Russound audioCmd = AUDIOCMD_RUSSOUND; break; case 5: // HAI Hi-Fi audioCmd = AUDIOCMD_HAIHIFI; break; case 6: // XANTECH audioCmd = AUDIOCMD_XANTECH; ; break; case 7: // SpeakerCraft audioCmd = AUDIOCMD_SPEAKEERCRAFT; break; default: break; } if (audioCmd != null) break; } // we should do something smarter here // for russound starting at index 5 + 1 // "Play", "Stop", "Pause", "Minus" Plus", "Previous", "Next ", if (audioCmd.length > 12) output.append( String.format( "Switch item=%s_Key label=\"\" mappings=[\"6\"=\">\", \"7\"=\"[ ]\", \"8\"=\"||\",\"9\"=\"-\",\"10\"=\"+\",\"11\"=\"<<\",\"12\"=\">>\"]\n", audio.getName())); output.append(String.format("Text item=%s_Text label=\"[%%s]\"\n", audio.getName())); output.append(String.format("Text item=%s_Field1 label=\"[%%s]\"\n", audio.getName())); output.append(String.format("Text item=%s_Field2 label=\"[%%s]\"\n", audio.getName())); output.append(String.format("Text item=%s_Field3 label=\"[%%s]\"\n", audio.getName())); output.append("}\n}\n"); } // end audioZones output.append("}\n}\n"); // begin zones if (zones.size() > 0) { output.append("Text label=\"Zones\" icon=\"" + IMG_SECURITY + "\" {\n"); output.append("Frame {\n"); for (SiteItem zone : zones) { output.append( String.format( "Text label=\"%s\" item=%s_Current{\n", zone.getObjName(), zone.getName())); output.append(String.format("Frame label=\"%s\"{\n", zone.getObjName())); output.append( String.format( "Switch item=%s_Arming label=\"\" icon=\"\" mappings=[\"bypass\"=Bypass, \"restore\"=Restore]\n", zone.getName())); output.append( String.format( "Text item=%s_Current icon=\"\" label=\"Current: [%%s]\"\n", zone.getName(), zone.getObjName())); output.append( String.format( "Text item=%s_Latched label=\"Latched: [%%s]\"", zone.getName(), zone.getObjName())); output.append( String.format( "Text item=%s_Arming label=\"Arming: [%%s]\"\n", zone.getName(), zone.getObjName())); output.append("}\n}\n"); } // end zones output.append("}\n}\n"); } // begin buttons if (buttons.size() > 0) { output.append("Text label=\"Buttons\" icon=\"" + IMG_BUTTON + "\"{\n"); output.append("Frame {\n"); for (SiteItem button : buttons) { output.append( String.format( "Switch item=%s label=\"%s\" icon=\"\" mappings=[\"push\"=\"Push\"]\n", button.getName(), button.getObjName())); } // end buttons output.append("}\n}\n"); } } // end sitemap output.append("\n\n}\n}\n"); System.out.println(output.toString()); }