Java tutorial
/* This file is part of JFLICKS. JFLICKS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. JFLICKS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with JFLICKS. If not, see <http://www.gnu.org/licenses/>. */ package org.jflicks.tv.programdata.sd.json; import java.io.File; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import org.apache.commons.codec.binary.Hex; import org.apache.commons.io.FileUtils; /** * Manage your settings at Schedules Direct JSON server.. * * @author Doug Barnum * @version 1.0 */ public class Manage { /** * Simple empty constructor. */ public Manage() { } public Client connect(String user, String password) throws NoSuchAlgorithmException { Client result = null; if ((user != null) && (password != null)) { MessageDigest md = MessageDigest.getInstance("SHA-1"); md.reset(); md.update(password.getBytes()); String sha = new String(Hex.encodeHex(md.digest())); Client c = new Client(); if (c.doToken(user, sha)) { if (c.doStatus()) { System.err.println("status ok\n"); result = c; } } } return (result); } public Lineup[] listAllLineups(Client c, String country, String zip) { Lineup[] result = null; if (c != null) { if (c.doHeadend(country, zip)) { HeadendObject[] array = c.getHeadendObjects(); if ((array != null) && (array.length > 0)) { ArrayList<Lineup> l = new ArrayList<Lineup>(); for (int i = 0; i < array.length; i++) { Lineup[] lups = array[i].getLineups(); if ((lups != null) && (lups.length > 0)) { for (int j = 0; j < lups.length; j++) { l.add(lups[j]); } } } if (l.size() > 0) { result = l.toArray(new Lineup[l.size()]); } } } else { throw new RuntimeException("No headends found!"); } } return (result); } public Lineup[] listAddedLineups(Client c) { Lineup[] result = null; if (c != null) { UserLineup ul = c.getUserLineup(); if (ul != null) { result = ul.getLineups(); } } return (result); } public LineupResponse addAntennaLineup(Client c, String country, String zip) { LineupResponse result = null; if (c != null) { if (c.doHeadend(country, zip)) { if (c.doAddLineup("Antenna", zip)) { result = c.getLineupResponse(); } } } return (result); } public String getAntennaStationConfig(Client c, String country, String zip) { String result = null; if (c != null) { if (c.doHeadend(country, zip)) { StringBuilder text = new StringBuilder(); Mapping mapping = c.getMapping("Local Over the Air Broadcast"); if (mapping != null) { Station[] sarray = mapping.getStations(); if ((sarray != null) && (sarray.length > 0)) { for (int i = 0; i < sarray.length; i++) { StationID sid = mapping.getStationID(sarray[i].getStationID()); if (sid != null) { String chan = sid.getChannel(); if (chan == null) { chan = sid.getAtscMajor() + "." + sid.getAtscMinor(); } if ((!chan.equals("0.0"))) { text.append(sid.getStationID()); text.append("="); text.append(chan); text.append("|"); text.append(sarray[i].getName()); text.append("\n"); } } } } else { throw new RuntimeException("Failed to get stations."); } } else { throw new RuntimeException("Failed to get station mapping."); } if (text.length() > 0) { result = text.toString(); } } else { throw new RuntimeException("Failed check country or zip"); } } return (result); } public static void main(String[] args) throws NoSuchAlgorithmException { final String LIST_ALL_LINEUPS = "listAllLineups"; final String LIST_ADDED_LINEUPS = "listAddedLineups"; final String ADD_LINEUP = "addLineup"; final String DELETE_LINEUP = "deleteLineup"; final String LIST_STATIONS = "listStations"; final String GUIDE = "guide"; final String PROGRAM = "program"; final String AUTOMAP = "automap"; String user = null; String password = null; //String action = LIST_ALL_LINEUPS; //String action = LIST_ADDED_LINEUPS; //String action = ADD_LINEUP; //String action = DELETE_LINEUP; //String action = LIST_STATIONS; //String action = GUIDE; String action = PROGRAM; String country = "USA"; String zip = "12095"; String lineup = null; String location = null; String automapJson = null; ArrayList<GuideRequest> glist = new ArrayList<GuideRequest>(); ArrayList<String> plist = new ArrayList<String>(); for (int i = 0; i < args.length; i += 2) { if (args[i].equalsIgnoreCase("-u")) { user = args[i + 1]; } else if (args[i].equalsIgnoreCase("-p")) { password = args[i + 1]; } else if (args[i].equalsIgnoreCase("-l")) { location = args[i + 1]; } else if (args[i].equalsIgnoreCase("-action")) { action = args[i + 1]; } else if (args[i].equalsIgnoreCase("-country")) { country = args[i + 1]; } else if (args[i].equalsIgnoreCase("-zipcode")) { zip = args[i + 1]; } else if (args[i].equalsIgnoreCase("-lineup")) { lineup = args[i + 1]; } else if (args[i].equalsIgnoreCase("-automapFile")) { File jsonData = new File(args[i + 1]); if ((jsonData.exists()) && (jsonData.isFile())) { try { automapJson = FileUtils.readFileToString(jsonData); } catch (IOException ex) { } } } else if (args[i].equalsIgnoreCase("-sid")) { String sid = args[i + 1]; GuideRequest gr = new GuideRequest(); gr.setStationID(sid); glist.add(gr); } else if (args[i].equalsIgnoreCase("-pid")) { String pid = args[i + 1]; plist.add(pid); } } if ((user != null) && (password != null)) { MessageDigest md = MessageDigest.getInstance("SHA-1"); md.reset(); md.update(password.getBytes()); String sha = new String(Hex.encodeHex(md.digest())); Client c = new Client(); if (c.doToken(user, sha)) { if (c.doStatus()) { System.err.println("status ok\n"); // Now perform the desired action. switch (action) { case LIST_ALL_LINEUPS: if (c.doHeadend(country, zip)) { HeadendObject[] array = c.getHeadendObjects(); if ((array != null) && (array.length > 0)) { for (int i = 0; i < array.length; i++) { Lineup[] lups = array[i].getLineups(); if ((lups != null) && (lups.length > 0)) { for (int j = 0; j < lups.length; j++) { String lupname = lups[j].getName(); lupname = lupname.replaceAll(" ", "-"); System.err.println("lineup=" + lups[j].getLineup() + " name=" + lupname + " location=" + array[i].getLocation()); } } } System.err.println("\nUse the name and location to add the lineup."); System.err .println("Plus use the name and location to remove it later if you want."); } } else { System.err.println("No headends found!"); } break; case LIST_ADDED_LINEUPS: UserLineup ul = c.getUserLineup(); if (ul != null) { Lineup[] lups = ul.getLineups(); if ((lups != null) && (lups.length > 0)) { for (int i = 0; i < lups.length; i++) { String lupname = lups[i].getName(); lupname = lupname.replaceAll(" ", "-"); System.err.println(lups[i].getLineup() + " name=" + lupname + " transport=" + lups[i].getTransport() + " location=" + lups[i].getLocation()); } } } else { System.err.println("No user lineups configured."); } break; case ADD_LINEUP: if (c.doHeadend(country, zip)) { if (c.doAddLineup(lineup, location)) { LineupResponse lr = c.getLineupResponse(); if (lr != null) { System.err.println(lr.getMessage()); } } else { System.err.println("Failed to add lineup."); } } else { System.err.println("Failed check country or zip"); } break; case DELETE_LINEUP: if (c.doHeadend(country, zip)) { if (c.doDeleteLineup(lineup, location)) { LineupResponse lr = c.getLineupResponse(); if (lr != null) { System.err.println(lr.getMessage()); } } else { System.err.println("Failed to delete lineup."); } } else { System.err.println("Failed check country or zip"); } break; case LIST_STATIONS: if (c.doHeadend(country, zip)) { Mapping mapping = c.getMapping(lineup); if (mapping != null) { Station[] sarray = mapping.getStations(); if ((sarray != null) && (sarray.length > 0)) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < sarray.length; i++) { StationID sid = mapping.getStationID(sarray[i].getStationID()); if (sid != null) { sb.setLength(0); sb.append(sid.getStationID()); sb.append("="); String chan = sid.getChannel(); if (chan == null) { chan = sid.getAtscMajor() + "." + sid.getAtscMinor(); } sb.append(chan); sb.append("|"); sb.append(sarray[i].getName()); System.err.println(sb.toString()); } } } else { System.err.println("Failed to get stations."); } } else { System.err.println("Failed to get station mapping."); } } else { System.err.println("Failed check country or zip"); } break; case GUIDE: if (glist.size() > 0) { GuideRequest[] garray = glist.toArray(new GuideRequest[glist.size()]); StationSchedule[] scheds = c.getGuide(garray); } else { System.err.println("Need Station IDs to get guide."); } break; case PROGRAM: if (plist.size() > 0) { System.err.println(c.getToken()); String[] parray = plist.toArray(new String[plist.size()]); Program[] progs = c.getPrograms(parray); System.err.println(progs); } else { System.err.println("Need Program IDs to get them."); } break; case AUTOMAP: if (automapJson != null) { System.out.println(c.doAutomap(automapJson)); } break; } } else { System.err.println("SD server OFFLINE, try later."); } } else { System.err.println("Failed to get token check user/password"); } } else { System.err.println("user or password null."); } } }