You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2017/09/24 20:12:22 UTC

[3/5] incubator-tamaya-sandbox git commit: TAMAYA-297: Removed OSGIConfigMapper to reduce complexity. Added restore functionality for backups.

TAMAYA-297: Removed OSGIConfigMapper to reduce complexity. Added restore functionality for backups.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/commit/dab1da7a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/tree/dab1da7a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/diff/dab1da7a

Branch: refs/heads/java8
Commit: dab1da7a7f959634c6b6ba7e6037e14b1f4f8575
Parents: fc0c72a
Author: anatole <an...@apache.org>
Authored: Sun Sep 24 21:41:31 2017 +0200
Committer: anatole <an...@apache.org>
Committed: Sun Sep 24 21:41:31 2017 +0200

----------------------------------------------------------------------
 .../java/org/apache/tamaya/osgi/Backups.java    | 110 +++++++++++++++++++
 .../org/apache/tamaya/osgi/InitialState.java    | 110 -------------------
 .../apache/tamaya/osgi/OSGIConfigMapper.java    |  38 -------
 .../tamaya/osgi/commands/BackupCommands.java    |  44 ++++++--
 4 files changed, 147 insertions(+), 155 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dab1da7a/osgi/common/src/main/java/org/apache/tamaya/osgi/Backups.java
----------------------------------------------------------------------
diff --git a/osgi/common/src/main/java/org/apache/tamaya/osgi/Backups.java b/osgi/common/src/main/java/org/apache/tamaya/osgi/Backups.java
new file mode 100644
index 0000000..cacf830
--- /dev/null
+++ b/osgi/common/src/main/java/org/apache/tamaya/osgi/Backups.java
@@ -0,0 +1,110 @@
+/*
+ * 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.tamaya.osgi;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/**
+ * Created by atsticks on 19.09.17.
+ */
+public final class Backups {
+
+    private static final Logger LOG = Logger.getLogger(Backups.class.getName());
+    private static Map<String, Hashtable<String,?>> initialConfigState = new ConcurrentHashMap<>();
+
+    private Backups(){}
+
+    public static void set(String pid, Dictionary<String,?> config){
+        initialConfigState.put(pid, toHashtable(config));
+    }
+
+    private static Hashtable<String, ?> toHashtable(Dictionary<String, ?> dictionary) {
+        if (dictionary == null) {
+            return null;
+        }
+        if(dictionary instanceof Hashtable){
+            return (Hashtable) dictionary;
+        }
+        Hashtable<String, Object> map = new Hashtable<>(dictionary.size());
+        Enumeration<String> keys = dictionary.keys();
+        while (keys.hasMoreElements()) {
+            String key = keys.nextElement();
+            map.put(key, dictionary.get(key));
+        }
+        return map;
+    }
+
+    public static Dictionary<String,?> remove(String pid){
+        return initialConfigState.remove(pid);
+    }
+
+    public static void removeAll(){
+        initialConfigState.clear();
+    }
+
+    public static Dictionary<String,?> get(String pid){
+        return initialConfigState.get(pid);
+    }
+
+    public static Map<String,Dictionary<String,?>> get(){
+        return new HashMap<>(initialConfigState);
+    }
+
+    public static Set<String> getPids(){
+        return initialConfigState.keySet();
+    }
+
+    public static boolean contains(String pid){
+        return initialConfigState.containsKey(pid);
+    }
+
+    public static void save(TamayaConfigPlugin plugin){
+        try{
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            ObjectOutputStream oos = new ObjectOutputStream(bos);
+            oos.writeObject(initialConfigState);
+            oos.flush();
+            Base64.getEncoder().encode(bos.toByteArray());
+            plugin.setConfigValue("backup", Base64.getEncoder().encode(bos.toByteArray()));
+        }catch(Exception e){
+            LOG.log(Level.SEVERE, "Failed to restore OSGI Backups.", e);
+        }
+    }
+
+    public static void restore(TamayaConfigPlugin plugin){
+        try{
+            String serialized = (String)plugin.getConfigValue("backup");
+            if(serialized!=null) {
+                ByteArrayInputStream bis = new ByteArrayInputStream(Base64.getDecoder().decode(serialized));
+                ObjectInputStream ois = new ObjectInputStream(bis);
+                initialConfigState = (Map<String, Hashtable<String,?>>) ois.readObject();
+                ois.close();
+            }
+        } catch (Exception e) {
+            LOG.log(Level.WARNING, "Failed to store getConfig change history.", e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dab1da7a/osgi/common/src/main/java/org/apache/tamaya/osgi/InitialState.java
----------------------------------------------------------------------
diff --git a/osgi/common/src/main/java/org/apache/tamaya/osgi/InitialState.java b/osgi/common/src/main/java/org/apache/tamaya/osgi/InitialState.java
deleted file mode 100644
index 9cc0a4a..0000000
--- a/osgi/common/src/main/java/org/apache/tamaya/osgi/InitialState.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * 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.tamaya.osgi;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Created by atsticks on 19.09.17.
- */
-public final class InitialState {
-
-    private static final Logger LOG = Logger.getLogger(InitialState.class.getName());
-    private static Map<String, Hashtable<String,?>> initialConfigState = new ConcurrentHashMap<>();
-
-    private InitialState(){}
-
-    public static void set(String pid, Dictionary<String,?> config){
-        initialConfigState.put(pid, toHashtable(config));
-    }
-
-    private static Hashtable<String, ?> toHashtable(Dictionary<String, ?> dictionary) {
-        if (dictionary == null) {
-            return null;
-        }
-        if(dictionary instanceof Hashtable){
-            return (Hashtable) dictionary;
-        }
-        Hashtable<String, Object> map = new Hashtable<>(dictionary.size());
-        Enumeration<String> keys = dictionary.keys();
-        while (keys.hasMoreElements()) {
-            String key = keys.nextElement();
-            map.put(key, dictionary.get(key));
-        }
-        return map;
-    }
-
-    public static Dictionary<String,?> remove(String pid){
-        return initialConfigState.remove(pid);
-    }
-
-    public static void removeAll(){
-        initialConfigState.clear();
-    }
-
-    public static Dictionary<String,?> get(String pid){
-        return initialConfigState.get(pid);
-    }
-
-    public static Map<String,Dictionary<String,?>> get(){
-        return new HashMap<>(initialConfigState);
-    }
-
-    public static Set<String> getPids(){
-        return initialConfigState.keySet();
-    }
-
-    public static boolean contains(String pid){
-        return initialConfigState.containsKey(pid);
-    }
-
-    public static void save(TamayaConfigPlugin plugin){
-        try{
-            ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            ObjectOutputStream oos = new ObjectOutputStream(bos);
-            oos.writeObject(initialConfigState);
-            oos.flush();
-            Base64.getEncoder().encode(bos.toByteArray());
-            plugin.setConfigValue("backup", Base64.getEncoder().encode(bos.toByteArray()));
-        }catch(Exception e){
-            LOG.log(Level.SEVERE, "Failed to restore OSGI Backups.", e);
-        }
-    }
-
-    public static void restore(TamayaConfigPlugin plugin){
-        try{
-            String serialized = (String)plugin.getConfigValue("backup");
-            if(serialized!=null) {
-                ByteArrayInputStream bis = new ByteArrayInputStream(Base64.getDecoder().decode(serialized));
-                ObjectInputStream ois = new ObjectInputStream(bis);
-                initialConfigState = (Map<String, Hashtable<String,?>>) ois.readObject();
-                ois.close();
-            }
-        } catch (Exception e) {
-            LOG.log(Level.WARNING, "Failed to store getConfig change history.", e);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dab1da7a/osgi/common/src/main/java/org/apache/tamaya/osgi/OSGIConfigMapper.java
----------------------------------------------------------------------
diff --git a/osgi/common/src/main/java/org/apache/tamaya/osgi/OSGIConfigMapper.java b/osgi/common/src/main/java/org/apache/tamaya/osgi/OSGIConfigMapper.java
deleted file mode 100644
index 2e90436..0000000
--- a/osgi/common/src/main/java/org/apache/tamaya/osgi/OSGIConfigMapper.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.tamaya.osgi;
-
-import org.apache.tamaya.Configuration;
-import org.osgi.framework.ServiceReference;
-
-/**
- * Mapping function for mapping Tamaya configuration sections to OSGI pids.
- */
-public interface OSGIConfigMapper {
-
-    /**
-     * Map the given OSGI pid to a corresponding configuration section in Tamaya. Es an example (and this is also the
-     * default implemented) a configuration mapping for {@code pid/factoryPid==myBundle} could be {@code [bundle:myBundle]}.
-     * This mapping is used as a prefix when collecting the corresponding entries for the OSGI configuration.
-     * @param pid the OSGI pid, or null
-     * @return return the corresponding getConfig root section. For ommitting any root section simply return an empty
-     * String.
-     */
-    Configuration getConfiguration(String pid);
-}

http://git-wip-us.apache.org/repos/asf/incubator-tamaya-sandbox/blob/dab1da7a/osgi/common/src/main/java/org/apache/tamaya/osgi/commands/BackupCommands.java
----------------------------------------------------------------------
diff --git a/osgi/common/src/main/java/org/apache/tamaya/osgi/commands/BackupCommands.java b/osgi/common/src/main/java/org/apache/tamaya/osgi/commands/BackupCommands.java
index ee1b299..d49f1cd 100644
--- a/osgi/common/src/main/java/org/apache/tamaya/osgi/commands/BackupCommands.java
+++ b/osgi/common/src/main/java/org/apache/tamaya/osgi/commands/BackupCommands.java
@@ -18,7 +18,8 @@
  */
 package org.apache.tamaya.osgi.commands;
 
-import org.apache.tamaya.osgi.InitialState;
+import org.apache.tamaya.osgi.Backups;
+import org.apache.tamaya.osgi.TamayaConfigPlugin;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
@@ -43,8 +44,8 @@ public final class BackupCommands {
         if(cfg!=null){
             Dictionary<String,?> props = cfg.getProperties();
             if(props!=null){
-                if(force || !InitialState.contains(pid)){
-                    InitialState.set(pid, props);
+                if(force || !Backups.contains(pid)){
+                    Backups.set(pid, props);
                     return "Backup created, PID = " + pid + '\n' +
                     printProps(props);
                 }
@@ -55,17 +56,46 @@ public final class BackupCommands {
 
     public static String deleteBackup(String pid) throws IOException {
         if("*".equals(pid)){
-            InitialState.removeAll();
+            Backups.removeAll();
             return "All Backups deleted.";
         }else {
-            InitialState.remove(pid);
+            Backups.remove(pid);
             return "Backup deleted: " + pid;
         }
     }
 
+    public static String restoreBackup(TamayaConfigPlugin plugin, String pid) throws IOException {
+        StringBuilder b = new StringBuilder("Restored Configurations:\n")
+                .append("------------------------\n");
+        if("*".equals(pid)){
+            for(String current: Backups.getPids()){
+                try{
+                    if(plugin.restoreBackup(current)){
+                        b.append(current).append(" -> restored.\n");
+                    }else{
+                        b.append(current).append(" -> no backup found.\n");
+                    }
+                }catch(Exception e){
+                    b.append(current).append(" -> failed: " + e).append('\n');
+                }
+            }
+            return b.toString();
+        }else {
+            try{
+                if(plugin.restoreBackup(pid)){
+                    return pid + " -> restored.\n";
+                }else{
+                    return pid + " -> no backup found.\n";
+                }
+            }catch(Exception e){
+                return pid + " -> failed: " + e + '\n';
+            }
+        }
+    }
+
     public static String listBackup(String pid) throws IOException {
         if(pid!=null){
-            Dictionary<String, ?> props = InitialState.get(pid);
+            Dictionary<String, ?> props = Backups.get(pid);
             if(props==null){
                 return "No backup found: " + pid;
             }else{
@@ -75,7 +105,7 @@ public final class BackupCommands {
         }else {
             StringWriter sw = new StringWriter();
             PrintWriter pw = new PrintWriter(sw);
-            for(Map.Entry<String, Dictionary<String,?>> en: InitialState.get().entrySet()){
+            for(Map.Entry<String, Dictionary<String,?>> en: Backups.get().entrySet()){
                 pw.println("PID: " + en.getKey());
                 pw.println(printProps(en.getValue()));
             }