ServerRegistry.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:6k
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
- package org.apache.hadoop.eclipse.servers;
- import java.io.File;
- import java.io.FilenameFilter;
- import java.io.IOException;
- import java.util.Collection;
- import java.util.Collections;
- import java.util.HashSet;
- import java.util.Map;
- import java.util.Set;
- import java.util.TreeMap;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.eclipse.Activator;
- import org.apache.hadoop.eclipse.server.HadoopServer;
- import org.eclipse.jface.dialogs.MessageDialog;
- /**
- * Register of Hadoop locations.
- *
- * Each location corresponds to a Hadoop {@link Configuration} stored as an
- * XML file in the workspace plug-in configuration directory:
- * <p>
- * <tt>
- * <workspace-dir>/.metadata/.plugins/org.apache.hadoop.eclipse/locations/*.xml
- * </tt>
- *
- */
- public class ServerRegistry {
- private static final ServerRegistry INSTANCE = new ServerRegistry();
- public static final int SERVER_ADDED = 0;
- public static final int SERVER_REMOVED = 1;
- public static final int SERVER_STATE_CHANGED = 2;
- private final File baseDir =
- Activator.getDefault().getStateLocation().toFile();
- private final File saveDir = new File(baseDir, "locations");
- private ServerRegistry() {
- if (saveDir.exists() && !saveDir.isDirectory())
- saveDir.delete();
- if (!saveDir.exists())
- saveDir.mkdirs();
- load();
- }
- private Map<String, HadoopServer> servers;
- private Set<IHadoopServerListener> listeners =
- new HashSet<IHadoopServerListener>();
- public static ServerRegistry getInstance() {
- return INSTANCE;
- }
- public synchronized Collection<HadoopServer> getServers() {
- return Collections.unmodifiableCollection(servers.values());
- }
- /**
- * Load all available locations from the workspace configuration directory.
- */
- private synchronized void load() {
- Map<String, HadoopServer> map = new TreeMap<String, HadoopServer>();
- for (File file : saveDir.listFiles()) {
- try {
- HadoopServer server = new HadoopServer(file);
- map.put(server.getLocationName(), server);
- } catch (Exception exn) {
- System.err.println(exn);
- }
- }
- this.servers = map;
- }
- private synchronized void store() {
- try {
- File dir = File.createTempFile("locations", "new", baseDir);
- dir.delete();
- dir.mkdirs();
- for (HadoopServer server : servers.values()) {
- server.storeSettingsToFile(new File(dir, server.getLocationName()
- + ".xml"));
- }
- FilenameFilter XMLFilter = new FilenameFilter() {
- public boolean accept(File dir, String name) {
- String lower = name.toLowerCase();
- return lower.endsWith(".xml");
- }
- };
- File backup = new File(baseDir, "locations.backup");
- if (backup.exists()) {
- for (File file : backup.listFiles(XMLFilter))
- if (!file.delete())
- throw new IOException("Unable to delete backup location file: "
- + file);
- if (!backup.delete())
- throw new IOException(
- "Unable to delete backup location directory: " + backup);
- }
- saveDir.renameTo(backup);
- dir.renameTo(saveDir);
- } catch (IOException ioe) {
- ioe.printStackTrace();
- MessageDialog.openError(null,
- "Saving configuration of Hadoop locations failed", ioe.toString());
- }
- }
- public void dispose() {
- for (HadoopServer server : getServers()) {
- server.dispose();
- }
- }
- public synchronized HadoopServer getServer(String location) {
- return servers.get(location);
- }
- /*
- * HadoopServer map listeners
- */
- public void addListener(IHadoopServerListener l) {
- synchronized (listeners) {
- listeners.add(l);
- }
- }
- public void removeListener(IHadoopServerListener l) {
- synchronized (listeners) {
- listeners.remove(l);
- }
- }
- private void fireListeners(HadoopServer location, int kind) {
- synchronized (listeners) {
- for (IHadoopServerListener listener : listeners) {
- listener.serverChanged(location, kind);
- }
- }
- }
- public synchronized void removeServer(HadoopServer server) {
- this.servers.remove(server.getLocationName());
- store();
- fireListeners(server, SERVER_REMOVED);
- }
- public synchronized void addServer(HadoopServer server) {
- this.servers.put(server.getLocationName(), server);
- store();
- fireListeners(server, SERVER_ADDED);
- }
- /**
- * Update one Hadoop location
- *
- * @param originalName the original location name (might have changed)
- * @param server the location
- */
- public synchronized void updateServer(String originalName,
- HadoopServer server) {
- // Update the map if the location name has changed
- if (!server.getLocationName().equals(originalName)) {
- servers.remove(originalName);
- servers.put(server.getLocationName(), server);
- }
- store();
- fireListeners(server, SERVER_STATE_CHANGED);
- }
- }