java-org.hwo.ui/src/org/hwo/ui/windowstate/WindowManager.java

134 lines
2.9 KiB
Java

package org.hwo.ui.windowstate;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JFrame;
import org.hwo.ByteArrayHexlifier;
public class WindowManager {
private static WindowManager instance;
public static WindowManager getInstance()
{
return instance;
}
Hashtable<Class<? extends JFrame>, StatedWindowManager> windowManagers;
protected WindowManager()
{
windowManagers = new Hashtable<Class<? extends JFrame>, StatedWindowManager>();
}
public void registerWindowManager(StatedWindowManager manager)
{
windowManagers.put(manager.getManagedClass(), manager);
}
public StatedWindowManager getStatedWindowManager(Class<? extends JFrame> clazz)
{
return windowManagers.get(clazz);
}
public StatedWindowManager getStatedWindowManager(String clazz)
{
for (StatedWindowManager manager: windowManagers.values())
{
if (manager.getManagedClass().getName().equals(clazz))
return manager;
}
return null;
}
public void restoreWindows(String states)
{
Hashtable<String, ArrayList<String>> htstates;
try
{
ByteArrayInputStream bis = new ByteArrayInputStream(ByteArrayHexlifier.stringToByteArray(states));
ObjectInputStream ois = new ObjectInputStream(bis);
htstates = (Hashtable<String, ArrayList<String>>)ois.readObject();
ois.close();
bis.close();
for (String fclazz: htstates.keySet())
{
System.err.println("Restoring Windows of Class: " + fclazz);
StatedWindowManager manager = getStatedWindowManager(fclazz);
if (manager != null)
{
manager.restoreWindows(htstates.get(fclazz).toArray(new String[]{}));
}
}
} catch (Exception e)
{
e.printStackTrace();
}
}
List<Class<? extends JFrame>> getKnownWindowClasses()
{
return new ArrayList<Class<? extends JFrame>>(windowManagers.keySet());
}
public String saveWindows()
{
Hashtable<String, ArrayList<String>> states = new Hashtable<String, ArrayList<String>>();
for (Class<? extends JFrame> wc: getKnownWindowClasses())
{
ArrayList<String> wcstates = new ArrayList<String>();
for (String ws: windowManagers.get(wc).saveWindows())
wcstates.add(ws);
states.put(wc.getName(), wcstates);
}
try
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(states);
oos.close();
bos.close();
return ByteArrayHexlifier.byteArrayToString(bos.toByteArray());
} catch (Exception e)
{
e.printStackTrace();
}
return "";
}
public void closeAllWindows()
{
for (StatedWindowManager manager: windowManagers.values())
{
manager.closeAllWindows();
}
}
static {
instance = new WindowManager();
}
}