/** * @param xcomputer * @return * @author Julius Huelsmann * @version %I%, %U% * @since 1.0 */ private boolean addComputer(final ComputerRemote xcomputer) { if (xcomputer == null || computer == null) { View.print(getClass() + "Fehler."); return false; } for (int i = 0; i < computer.size(); i++) { // // In case the computer has already been added or the computer to add // is the local computer, return false. if (xcomputer.matches(computer.get(i))) { return false; } else if (xcomputer.getUid().equals(getUid())) { return false; } } Staticio.skipPort(xcomputer.getPort()); computer.add(xcomputer); setChanged(); notifyObservers(new Object[] {View.ID_UPDATE_COMPUTER, computer}); save(Constants.getConfigLocal()); return true; }
/** * Generate information string on the local computer configuration (includes {@link #computer}, * {@link #repositories}, {@link #combination}). * * @return whether new changes have occurred due to the update. * @author Julius Huelsmann * @version %I%, %U% * @since 1.0 */ public boolean convertInformationString(final String xstring, final String xadr) { // go through all the identifiers and generate Vector of Computers, // Repositories and Link-Combinations boolean changesOccurred = false; // // Fetch information from string final int occurr1 = xstring.indexOf(Utils.invalidCharLevel1); final String remoteUid = xstring.substring(0, occurr1); final String rest00 = xstring.substring(occurr1 + 1, xstring.length()); final String port = rest00.substring(0, rest00.indexOf(Utils.invalidCharLevel1)); final int iport = Integer.parseInt(port); boolean found = false; for (int i = 0; i < computer.size(); i++) { if (computer.get(i).getUid().equals(remoteUid)) { found = true; if (computer.get(i).getPort() != iport || computer.get(i).getAddress().equals(xadr) || computer.get(i).isConnected() == false) { changesOccurred = true; } computer.get(i).setPort(iport); computer.get(i).setAddress(xadr); computer.get(i).setConnected(true); computer.get(i).setContacted(); } } // if the computer has not been found inside the list of computers, add // it. if (!found) { ComputerRemote cr = new ComputerRemote(remoteUid, xadr, iport); cr.setConnected(true); addComputer(cr); changesOccurred = true; cr.setContacted(); } // TODO: Check whether the computer with the UID has already been added // to the list of computers. String remainingString = xstring.substring(remoteUid.length() + port.length() + 2, xstring.length()); String strgComputer = remainingString.substring(0, remainingString.indexOf(Utils.invalidCharLevel1)); remainingString = remainingString.substring(strgComputer.length() + 1, remainingString.length()); String strgRepositories = remainingString.substring(0, remainingString.indexOf(Utils.invalidCharLevel1)); remainingString = remainingString.substring(strgRepositories.length() + 1, remainingString.length()); String strgCombination = remainingString; // // ComputerRemote for (int i = strgComputer.indexOf(Utils.invalidCharLevel2); i != -1; i = strgComputer.indexOf(Utils.invalidCharLevel2)) { final String strgComputerSingle = strgComputer.substring(0, i); strgComputer = strgComputer.substring(i + 1, strgComputer.length()); ComputerRemote comp = ComputerRemote.convertInformationString(strgComputerSingle); changesOccurred = addComputer(comp) || changesOccurred; } // // Repository for (int i = strgRepositories.indexOf(Utils.invalidCharLevel2); i != -1; i = strgRepositories.indexOf(Utils.invalidCharLevel2)) { final String strgSingle = strgRepositories.substring(0, i); strgRepositories = strgRepositories.substring(i + 1, strgRepositories.length()); Repository repo = Repository.convertInformationString(strgSingle); changesOccurred = addRepository(repo) || changesOccurred; } // // Links // Important: the Links can ony be added to the vector of for (int i = strgCombination.indexOf(Utils.invalidCharLevel2); i != -1; i = strgCombination.indexOf(Utils.invalidCharLevel2)) { final String strgSingle = strgCombination.substring(0, i); strgCombination = strgCombination.substring(i + 1, strgCombination.length()); Link clink = Link.convertInformationString(strgSingle, repositories, computer); changesOccurred = addLink(clink) || changesOccurred; } View.print("Something changed: " + changesOccurred); if (changesOccurred) { changed(); } // Return whether the above-created computers, combinations and // repositories have been already added to list. return changesOccurred; }
/** * Broadcast all information to specified computer. * * @param xcr the computerRemote which will receive the information. * @author Julius Huelsmann * @version %I%, %U% * @since 1.0 */ public void sendInformationTo(final ComputerRemote xcr) { Staticio.sendStringServerinfoReply(xcr.getAddress(), xcr.getPort(), this); }