/** * Copyright 2012 Charles du Jeu * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This file is part of the AjaXplorer Java Client * More info on http://ajaxplorer.info/ */ package info.ajaxplorer.client.http; import info.ajaxplorer.client.model.Node; import info.ajaxplorer.client.model.Server; import java.util.ArrayList; import java.util.Iterator; public class RestStateHolder { public static final int FILE_UPLOAD_CHUNK_1K = 1024; public static final int FILE_UPLOAD_CHUNK_8K = 1024 * 8; public static final int FILE_UPLOAD_CHUNK_16K = 1024 * 16; private static RestStateHolder instance; private Server server; private Node repository; private Node directory; private String SECURE_TOKEN; // upload file chunk size private int fileUploadChunkSize = FILE_UPLOAD_CHUNK_1K; private ArrayList<StateListener> listeners = new ArrayList<RestStateHolder.StateListener>(); private RestStateHolder(){ } public static RestStateHolder getInstance(){ if(instance == null){ instance = new RestStateHolder(); } return instance; } public interface StateListener{ } public interface ServerStateListener extends StateListener{ public void onServerChange(Server newServer, Server oldServer); } public interface RepositoryStateListener extends StateListener{ public void onRepositoryChange(Node newRepository, Node oldRepository); } public interface DirectoryStateListener extends StateListener{ public void onDirectoryChange(Node newDirectory, Node oldDirectory); } public interface ServerStateResolutionListener extends StateListener{ public void onServerChangeResolution(Server server); } public void registerStateListener(StateListener listener){ this.listeners.add(listener); } public void unRegisterStateListener(StateListener listener){ this.listeners.remove(listener); } public boolean isServerSet(){ return server != null; } public Server getServer() { return server; } public String getSECURE_TOKEN() { return SECURE_TOKEN; } public void setSECURE_TOKEN(String token) { SECURE_TOKEN = token; } public void setServer(Server serverToSet) { if(serverToSet == null){ return; } Server oldServer = null; if(this.server != null && this.server != serverToSet){ oldServer = this.server; } this.server = serverToSet; Iterator<StateListener> it = listeners.iterator(); while(it.hasNext()){ StateListener l = it.next(); if(l instanceof ServerStateListener){ ((ServerStateListener)l).onServerChange(serverToSet, oldServer); } } } public void notifyServerChanged(Server server) { Iterator<StateListener> it = listeners.iterator(); while(it.hasNext()){ StateListener l = it.next(); if(l instanceof ServerStateResolutionListener){ ((ServerStateResolutionListener)l).onServerChangeResolution(server); } } } public boolean isRepositorySet(){ return repository != null; } public Node getRepository() { return repository; } public void setRepository(Node currentRepository) { Node oldRepo = null; if(this.repository != null && this.repository != currentRepository){ oldRepo = this.repository; } this.repository = currentRepository; Iterator<StateListener> it = listeners.iterator(); while(it.hasNext()){ StateListener l = it.next(); if(l instanceof RepositoryStateListener){ ((RepositoryStateListener)l).onRepositoryChange(currentRepository, oldRepo); } } } public boolean isDirectorySet(){ return directory != null; } public Node getDirectory() { return directory; } public void setDirectory(Node currentDirectory) { Node oldDirectory = null; if(this.directory != null && this.directory != currentDirectory){ oldDirectory = this.directory; } this.directory = currentDirectory; Iterator<StateListener> it = listeners.iterator(); while(it.hasNext()){ StateListener l = it.next(); if(l instanceof DirectoryStateListener){ ((DirectoryStateListener)l).onDirectoryChange(currentDirectory, oldDirectory); } } } /** * Sets chunk size for AjxpFileBody during upload * * @param fileUploadChunkSize */ public void setFileUploadChunkSize(int fileUploadChunkSize) { this.fileUploadChunkSize = fileUploadChunkSize; } public int getFileUploadChunkSize() { return fileUploadChunkSize; } }