Author: kono
Date: 2012-02-22 11:48:27 -0800 (Wed, 22 Feb 2012)
New Revision: 28336

Added:
   core3/impl/trunk/welcome-impl/
   core3/impl/trunk/welcome-impl/pom.xml
   core3/impl/trunk/welcome-impl/src/
   core3/impl/trunk/welcome-impl/src/main/
   core3/impl/trunk/welcome-impl/src/main/java/
   core3/impl/trunk/welcome-impl/src/main/java/org/
   core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/
   core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/
   core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/BackgroundImagePanel.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTask.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTaskFactory.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/HelpPanel.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/LogoPanel.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
   
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
   core3/impl/trunk/welcome-impl/src/main/resources/
   core3/impl/trunk/welcome-impl/src/main/resources/images/
   core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/
   
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/net_db_import_small.png
   
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/net_file_import_small.png
   
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/open_session.png
   core3/impl/trunk/welcome-impl/src/main/resources/images/background.png
   core3/impl/trunk/welcome-impl/src/main/resources/images/logo.png
   core3/impl/trunk/welcome-impl/src/test/
   core3/impl/trunk/welcome-impl/src/test/java/
   core3/impl/trunk/welcome-impl/src/test/java/org/
   core3/impl/trunk/welcome-impl/src/test/java/org/cytoscape/
   core3/impl/trunk/welcome-impl/src/test/java/org/cytoscape/welcome/
   core3/impl/trunk/welcome-impl/src/test/java/org/cytoscape/welcome/internal/
Log:
refs #597 New bundle for Welcome Screen had been added.

Added: core3/impl/trunk/welcome-impl/pom.xml
===================================================================
--- core3/impl/trunk/welcome-impl/pom.xml                               (rev 0)
+++ core3/impl/trunk/welcome-impl/pom.xml       2012-02-22 19:48:27 UTC (rev 
28336)
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+
+       <parent>
+               <artifactId>impl-parent</artifactId>
+               <groupId>org.cytoscape</groupId>
+               <version>3.0.0-alpha8-SNAPSHOT</version>
+       </parent>
+
+       <properties>
+               
<bundle.symbolicName>org.cytoscape.welcome-impl</bundle.symbolicName>
+               
<bundle.namespace>org.cytoscape.welcome.internal</bundle.namespace>
+       </properties>
+
+       <modelVersion>4.0.0</modelVersion>
+       <artifactId>welcome-impl</artifactId>
+
+       <name>${bundle.symbolicName} [${bundle.namespace}]</name>
+
+       <packaging>bundle</packaging>
+
+
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-jar-plugin</artifactId>
+                               <version>${maven-jar-plugin.version}</version>
+                               <executions>
+                                       <execution>
+                                               <goals>
+                                                       <goal>test-jar</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-surefire-plugin</artifactId>
+                               
<version>${maven-surefire-plugin.version}</version>
+                               <configuration>
+                                       
<redirectTestOutputToFile>true</redirectTestOutputToFile>
+                               </configuration>
+                       </plugin>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               
<version>${maven-bundle-plugin.version}</version>
+                               <extensions>true</extensions>
+                               <configuration>
+                                       <instructions>
+                                               
<Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
+                                               
<Bundle-Version>${project.version}</Bundle-Version>
+                                               
<Export-Package>!${bundle.namespace}.*</Export-Package>
+                                               
<Private-Package>${bundle.namespace}.*</Private-Package>
+                                               
<Bundle-Activator>${bundle.namespace}.CyActivator</Bundle-Activator>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+
+       <repositories>
+               <repository>
+                       <id>cytoscape_snapshots</id>
+                       <snapshots>
+                               <enabled>true</enabled>
+                       </snapshots>
+                       <releases>
+                               <enabled>false</enabled>
+                       </releases>
+                       <name>Cytoscape Snapshots</name>
+                       
<url>http://code.cytoscape.org/nexus/content/repositories/snapshots/</url>
+               </repository>
+               <repository>
+                       <id>cytoscape_releases</id>
+                       <snapshots>
+                               <enabled>false</enabled>
+                       </snapshots>
+                       <releases>
+                               <enabled>true</enabled>
+                       </releases>
+                       <name>Cytoscape Releases</name>
+                       
<url>http://code.cytoscape.org/nexus/content/repositories/releases/</url>
+               </repository>
+       </repositories>
+       <dependencies>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>datasource-api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>swing-util-api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>core-task-api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
+                       <artifactId>swing-application-api</artifactId>
+               </dependency>
+               
+               <!-- Testing -->
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.mockito</groupId>
+                       <artifactId>mockito-all</artifactId>
+                       <scope>test</scope>
+               </dependency>
+
+       </dependencies>
+
+</project>

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/BackgroundImagePanel.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/BackgroundImagePanel.java
                                (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/BackgroundImagePanel.java
        2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,32 @@
+package org.cytoscape.welcome.internal;
+
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+
+import javax.swing.JPanel;
+
+public class BackgroundImagePanel extends JPanel {
+       
+       private static final long serialVersionUID = 3969531543044198032L;
+       
+       private final BufferedImage image;
+       
+       public BackgroundImagePanel(final BufferedImage image) {
+               this.image = image;
+       }
+
+       @Override
+       public void paintComponent(Graphics g) {
+               Graphics2D g2D = (Graphics2D) g;
+
+               int panelWidth = this.getWidth();
+               int panelHeight = this.getHeight();
+               
+               g2D.setColor(getBackground());
+               g2D.fillRect(0, 0, panelWidth, panelHeight);
+
+               g2D.drawImage(image, null, 0, 0);
+       }
+
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
                               (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CreateNewNetworkPanel.java
       2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,297 @@
+package org.cytoscape.welcome.internal;
+
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.imageio.ImageIO;
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.ImageIcon;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.border.LineBorder;
+
+import org.cytoscape.application.CyApplicationConfiguration;
+import org.cytoscape.application.swing.CyAction;
+import org.cytoscape.datasource.DataSource;
+import org.cytoscape.datasource.DataSourceManager;
+import org.cytoscape.io.DataCategory;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.task.NetworkTaskFactory;
+import org.cytoscape.task.creation.ImportNetworksTaskFactory;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskManager;
+import org.cytoscape.work.TaskMonitor;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CreateNewNetworkPanel extends JPanel implements ActionListener {
+
+       private static final long serialVersionUID = -8750909701276867389L;
+
+       private static final Logger logger = 
LoggerFactory.getLogger(CreateNewNetworkPanel.class);
+
+       private static final String VIEW_THRESHOLD = "viewThreshold";
+       private static final int DEF_VIEW_THRESHOLD = 3000;
+
+       private static final String ICON_OPEN = 
"images/Icons/net_file_import_small.png";
+       private static final String ICON_DATABASE = 
"images/Icons/net_db_import_small.png";
+
+       private JLabel loadNetwork;
+       private JLabel fromDB;
+       private JLabel fromWebService;
+
+       private JComboBox networkList;
+       private JCheckBox layout;
+
+       private final TaskManager guiTaskManager;
+
+       private Window parent;
+
+       private final BundleContext bc;
+
+       private final ImportNetworksTaskFactory importNetworkFromURLTF;
+       private final TaskFactory importNetworkFileTF;
+       private final NetworkTaskFactory createViewTaskFactory;
+
+       private final DataSourceManager dsManager;
+       private final Map<String, String> dataSourceMap;
+
+       private final int viewThreshold;
+
+       private boolean firstSelection = false;
+
+       CreateNewNetworkPanel(Window parent, final BundleContext bc, final 
TaskManager guiTaskManager,
+                       final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory loadTF,
+                       final NetworkTaskFactory createViewTaskFactory, final 
CyApplicationConfiguration config,
+                       final DataSourceManager dsManager, final Properties 
props) {
+               this.parent = parent;
+               this.bc = bc;
+
+               this.importNetworkFromURLTF = loadTF;
+               this.createViewTaskFactory = createViewTaskFactory;
+               this.importNetworkFileTF = importNetworkFileTF;
+               this.guiTaskManager = guiTaskManager;
+               this.dsManager = dsManager;
+               this.viewThreshold = getViewThreshold(props);
+
+               this.dataSourceMap = new HashMap<String, String>();
+               this.networkList = new JComboBox();
+
+               setFromDataSource();
+
+               initComponents();
+
+               // Enable combo box listener here to avoid unnecessary reaction.
+               this.networkList.addActionListener(this);
+       }
+
+       private void setFromDataSource() {
+               DefaultComboBoxModel theModel = new DefaultComboBoxModel();
+
+               // Extract the URL entries
+               final Collection<DataSource> dataSources = 
dsManager.getDataSources(DataCategory.NETWORK);
+               final SortedSet<String> labelSet = new TreeSet<String>();
+               if (dataSources != null) {
+                       for (DataSource ds : dataSources) {
+                               String link = null;
+                               link = ds.getLocation().toString();
+                               final String sourceName = ds.getName();
+                               final String provider = ds.getProvider();
+                               final String sourceLabel = provider + ":" + 
sourceName;
+                               dataSourceMap.put(sourceLabel, link);
+                               labelSet.add(sourceLabel);
+                       }
+               }
+
+               theModel.addElement("Select a network ...");
+               
+               for (final String label : labelSet)
+                       theModel.addElement(label);
+
+               this.networkList.setModel(theModel);
+       }
+
+       private void initComponents() {
+
+               BufferedImage openIconImg = null;
+               BufferedImage databaseIconImg = null;
+               try {
+                       openIconImg = 
ImageIO.read(WelcomeScreenDialog.class.getClassLoader().getResource(ICON_OPEN));
+                       databaseIconImg = 
ImageIO.read(WelcomeScreenDialog.class.getClassLoader().getResource(ICON_DATABASE));
+               } catch (IOException e) {
+                       logger.error("Could not load icons", e);
+               }
+
+               ImageIcon openIcon = new ImageIcon(openIconImg);
+               ImageIcon databaseIcon = new ImageIcon(databaseIconImg);
+
+               this.layout = new JCheckBox();
+               layout.setText("Apply default layout");
+               layout.setToolTipText("Note: This option may take minutes to 
finish for large networks!");
+
+               this.loadNetwork = new JLabel("From file...");
+               this.loadNetwork.setIcon(openIcon);
+
+               loadNetwork.addMouseListener(new MouseAdapter() {
+                       @Override
+                       public void mouseClicked(MouseEvent ev) {
+                               // Load network from file.
+                               parent.dispose();
+                               guiTaskManager.execute(importNetworkFileTF);
+                       }
+               });
+               this.setBorder(new LineBorder(new Color(0, 0, 0, 0), 10));
+
+               this.fromDB = new JLabel("From Reference Network Data:");
+               this.fromDB.setIcon(databaseIcon);
+
+               this.fromWebService = new JLabel("From Public Web Service...");
+               this.fromWebService.addMouseListener(new MouseAdapter() {
+                       @Override
+                       public void mouseClicked(MouseEvent ev) {
+                               // Load network from web service.
+                               parent.dispose();
+                               try {
+                                       execute(bc);
+                               } catch (InvalidSyntaxException e) {
+                                       logger.error("Could not execute the 
action", e);
+                               }
+                       }
+               });
+
+               this.setLayout(new GridLayout(5, 1));
+               this.add(loadNetwork);
+               this.add(fromWebService);
+               this.add(fromDB);
+               this.add(networkList);
+               this.add(layout);
+
+       }
+
+       private void loadNetwork() throws URISyntaxException, 
MalformedURLException {
+
+               // Get selected file from the combo box
+               final Object file = networkList.getSelectedItem();
+               if (file == null)
+                       return;
+
+               if (!dataSourceMap.containsKey(file))
+                       return;
+               final URL url = new URL(dataSourceMap.get(file));
+
+               parent.dispose();
+
+               // TODO REFACTOR!!!!!!!!!!!!!!!!!!!
+               guiTaskManager.execute(new TaskFactory() {
+
+                       @Override
+                       public TaskIterator createTaskIterator() {
+                               return new TaskIterator(2,
+                                               new CreateNetworkViewTask(url, 
importNetworkFromURLTF, createViewTaskFactory));
+                       }
+               });
+
+       }
+
+       private int getViewThreshold(final Properties props) {
+               final String vts = props.getProperty(VIEW_THRESHOLD);
+               int threshold;
+               try {
+                       threshold = Integer.parseInt(vts);
+               } catch (Exception e) {
+                       threshold = DEF_VIEW_THRESHOLD;
+               }
+
+               return threshold;
+       }
+
+       private final class CreateNetworkViewTask extends AbstractTask {
+
+               private final ImportNetworksTaskFactory loadNetworkFileTF;
+               private final NetworkTaskFactory createViewTaskFactory;
+
+               private final URL url;
+
+               public CreateNetworkViewTask(final URL url, final 
ImportNetworksTaskFactory loadNetworkFileTF,
+                               final NetworkTaskFactory createViewTaskFactory) 
{
+                       this.loadNetworkFileTF = loadNetworkFileTF;
+                       this.createViewTaskFactory = createViewTaskFactory;
+                       this.url = url;
+               }
+
+               @Override
+               public void run(TaskMonitor taskMonitor) throws Exception {
+                       taskMonitor.setTitle("Loading network...");
+                       taskMonitor.setStatusMessage("Loading network.  Please 
wait...");
+                       taskMonitor.setProgress(0.01d);
+
+                       final Set<CyNetwork> networks = 
this.loadNetworkFileTF.loadCyNetworks(url);
+                       taskMonitor.setProgress(1.0d);
+               /*
+                       if (networks.size() != 0) {
+                               taskMonitor.setTitle("Creating View for the new 
network");
+                               CyNetwork network = networks.iterator().next();
+                               final int numGraphObjects = 
network.getNodeCount() + network.getEdgeCount();
+                               if (numGraphObjects >= viewThreshold) {
+                                       // Force to create view.
+                                       
createViewTaskFactory.setNetwork(network);
+                                       taskMonitor.setStatusMessage("Loading 
done.  Creating view for the network...");
+                                       
insertTasksAfterCurrentTask(createViewTaskFactory.createTaskIterator());
+                               }
+                       }
+               */
+               }
+
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent e) {
+               try {
+                       loadNetwork();
+               } catch (Exception ex) {
+                       logger.error("Could not load network.", ex);
+               }
+       }
+
+       /**
+        * Due to its dependency, we need to import this service dynamically.
+        * 
+        * @throws InvalidSyntaxException
+        */
+       private void execute(BundleContext bc) throws InvalidSyntaxException {
+               final ServiceReference[] actions = 
bc.getAllServiceReferences("org.cytoscape.application.swing.CyAction",
+                               
"(id=showImportNetworkFromWebServiceDialogAction)");
+               if (actions == null || actions.length != 1) {
+                       logger.error("Could not find action");
+                       return;
+               }
+
+               final ServiceReference ref = actions[0];
+               final CyAction action = (CyAction) bc.getService(ref);
+               action.actionPerformed(null);
+       }
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
                         (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/CyActivator.java
 2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,48 @@
+package org.cytoscape.welcome.internal;
+
+import java.util.Properties;
+
+import org.cytoscape.application.CyApplicationConfiguration;
+import org.cytoscape.application.swing.CySwingApplication;
+import org.cytoscape.datasource.DataSourceManager;
+import org.cytoscape.io.util.RecentlyOpenedTracker;
+import org.cytoscape.property.CyProperty;
+import org.cytoscape.service.util.AbstractCyActivator;
+import org.cytoscape.task.NetworkTaskFactory;
+import org.cytoscape.task.creation.ImportNetworksTaskFactory;
+import org.cytoscape.util.swing.OpenBrowser;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.swing.SubmenuTaskManager;
+import org.osgi.framework.BundleContext;
+
+public class CyActivator extends AbstractCyActivator {
+       public CyActivator() {
+               super();
+       }
+
+       public void start(BundleContext bc) {
+               CySwingApplication cytoscapeDesktop = getService(bc, 
CySwingApplication.class);
+               OpenBrowser openBrowserServiceRef = getService(bc, 
OpenBrowser.class);
+               RecentlyOpenedTracker recentlyOpenedTrackerServiceRef = 
getService(bc, RecentlyOpenedTracker.class);
+               TaskFactory openSessionTaskFactory = getService(bc, 
TaskFactory.class, "(id=openSessionTaskFactory)");
+               SubmenuTaskManager submenuTaskManagerServiceRef = 
getService(bc, SubmenuTaskManager.class);
+               TaskFactory importNetworkFileTF = getService(bc, 
TaskFactory.class, "(id=loadNetworkFileTaskFactory)");
+               ImportNetworksTaskFactory importNetworkTF = getService(bc, 
ImportNetworksTaskFactory.class,
+                               "(id=loadNetworkURLTaskFactory)");
+               NetworkTaskFactory createNetworkViewTaskFactory = 
getService(bc, NetworkTaskFactory.class,
+                               "(id=createNetworkViewTaskFactory)");
+               CyApplicationConfiguration cyApplicationConfigurationServiceRef 
= getService(bc,
+                               CyApplicationConfiguration.class);
+               DataSourceManager dsManagerServiceRef = getService(bc, 
DataSourceManager.class);
+               CyProperty<Properties> cytoscapePropertiesServiceRef = 
getService(bc, CyProperty.class,
+                               "(cyPropertyName=cytoscape3.props)");
+
+               // Show Welcome Screen
+               final WelcomeScreenAction welcomeScreenAction = new 
WelcomeScreenAction(bc, cytoscapeDesktop,
+                               openBrowserServiceRef, 
recentlyOpenedTrackerServiceRef, openSessionTaskFactory,
+                               submenuTaskManagerServiceRef, 
importNetworkFileTF, importNetworkTF, createNetworkViewTaskFactory,
+                               cyApplicationConfigurationServiceRef, 
dsManagerServiceRef, cytoscapePropertiesServiceRef);
+               
+               registerAllServices(bc, welcomeScreenAction, new Properties());
+       }
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTask.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTask.java
                             (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTask.java
     2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,151 @@
+package org.cytoscape.welcome.internal;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import javax.swing.JComboBox;
+
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskMonitor;
+
+public class DownloadBiogridDataTask extends AbstractTask {
+
+       private static final String DEF_URL = 
"http://thebiogrid.org/downloads/archives/Release%20Archive/BIOGRID-3.1.81/BIOGRID-ORGANISM-3.1.81.mitab.zip";;
+
+       public final static int BUF_SIZE = 1024;
+       private static final String LOCAL = "biogrid";
+       private URL source;
+       private File localFile;
+
+       private JComboBox fileList;
+
+       private static final Map<String, String> FILTER = new HashMap<String, 
String>();
+       private final Map<String, URL> sourceMap;
+
+       static {
+               FILTER.put("Homo_sapiens", "BioGRID: Human Interactome");
+               FILTER.put("Saccharomyces_cerevisiae", "BioGRID: Yeast 
Interactome");
+               FILTER.put("Drosophila_melanogaster", "BioGRID: Fly 
Interactome");
+               FILTER.put("Mus_musculus", "BioGRID: Mouse Interactome");
+       }
+
+       public DownloadBiogridDataTask(final File settingFileLocation, 
JComboBox fileList) {
+               this.fileList = fileList;
+               fileList.addItem("Preparing files.  Please wait...");
+               fileList.setEnabled(false);
+               sourceMap = new HashMap<String, URL>();
+
+               localFile = new File(settingFileLocation, LOCAL);
+               if (localFile.exists() == false)
+                       localFile.mkdir();
+       }
+
+       private boolean isUp2Date() {
+
+               final String[] listOfFiles = localFile.list();
+
+               if (listOfFiles.length != 0)
+                       return true;
+               else
+                       return false;
+       }
+
+       @Override
+       public void run(TaskMonitor taskMonitor) throws Exception {
+
+               if (isUp2Date() == false) {
+                       source = new URL(DEF_URL);
+                       download();
+               } else {
+                       File[] files = localFile.listFiles();
+                       for (File file : files) {
+                               String name = file.getName();
+                               String fileName = createName(name);
+                               if (name.equals(fileName))
+                                       continue;
+                               fileList.addItem(fileName);
+                               sourceMap.put(fileName, file.toURI().toURL());
+                               
+                       }
+               }
+
+               fileList.removeItemAt(0);
+               fileList.setEnabled(true);
+               taskMonitor.setProgress(1.0);
+       }
+
+       private void download() throws IOException {
+               ZipInputStream zis = new ZipInputStream(source.openStream());
+
+               try {
+
+                       // Extract list of entries
+                       ZipEntry zen = null;
+                       String entryName = null;
+
+                       while ((zen = zis.getNextEntry()) != null) {
+                               entryName = zen.getName();
+                               // Remove .txt
+                               String newName = entryName.replace(".txt", "");
+                               final String name = createName(newName);
+                               if (name.equals(newName))
+                                       continue;
+
+                               File outFile = new File(localFile, newName);
+                               this.fileList.addItem(name);
+
+                               processOneEntry(outFile, zis);
+                               zis.closeEntry();
+                               this.sourceMap.put(name, 
outFile.toURI().toURL());
+                       }
+
+               } finally {
+                       if (zis != null)
+                               zis.close();
+                       zis = null;
+               }
+       }
+
+       private void processOneEntry(File outFile, InputStream is) throws 
IOException {
+               outFile.createNewFile();
+               FileWriter outWriter = new FileWriter(outFile);
+               String line;
+               final BufferedReader br = new BufferedReader(new 
InputStreamReader(is));
+
+               int count = 0;
+               while ((line = br.readLine()) != null) {
+                       if (line.startsWith("#"))
+                               continue;
+                       outWriter.write(line + "\n");
+                       count++;
+               }
+               outWriter.close();
+       }
+
+       private String createName(String name) {
+               for (String key : FILTER.keySet()) {
+                       if (name.contains(key)) {
+                               return FILTER.get(key);
+                       }
+               }
+
+               return name;
+       }
+       
+       Map<String, URL> getSourceMap() {
+               return this.sourceMap;
+       }
+
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTaskFactory.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTaskFactory.java
                              (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/DownloadBiogridDataTaskFactory.java
      2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,36 @@
+package org.cytoscape.welcome.internal;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Map;
+
+import javax.swing.JComboBox;
+
+import org.cytoscape.application.CyApplicationConfiguration;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskIterator;
+
+public class DownloadBiogridDataTaskFactory implements TaskFactory {
+
+       private final JComboBox list;
+       
+       private DownloadBiogridDataTask task;
+       
+       private final File settingFile;
+       
+       DownloadBiogridDataTaskFactory(final JComboBox list, final 
CyApplicationConfiguration config) {
+               settingFile = config.getConfigurationDirectoryLocation();
+               this.list = list;
+       }
+       
+       @Override
+       public TaskIterator createTaskIterator() {
+               task = new DownloadBiogridDataTask(settingFile, list);
+               return new TaskIterator(task);
+       }
+       
+       Map<String, URL> getMap() {
+               return task.getSourceMap();
+       }
+
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/HelpPanel.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/HelpPanel.java
                           (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/HelpPanel.java
   2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,98 @@
+package org.cytoscape.welcome.internal;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+
+import org.cytoscape.property.CyProperty;
+import org.cytoscape.util.swing.OpenBrowser;
+
+public class HelpPanel extends JPanel {
+       
+       private static final Font LABEL_FONT = new Font("SansSerif", 
Font.PLAIN, 12);
+       private static final Color LABEL_COLOR = new Color(0x40, 0x40, 0x40);
+
+       private static final Color SELECTED_COLOR = new Color(0x63, 0xB8, 0xFF);
+       private static final Font SELECTED_FONT = new Font("SansSerif", 
Font.BOLD, 12);
+
+       
+       private JLabel about;
+       private JLabel manual;
+       private JLabel tutorial;
+       private JLabel bugReport;
+       
+       private final List<JLabel> labelSet;
+       private final Map<JLabel, String> urlMap;
+       
+       private final OpenBrowser openBrowserServiceRef;
+       private final CyProperty<Properties> cyProps;
+       
+       HelpPanel(final OpenBrowser openBrowserServiceRef, 
CyProperty<Properties> cyProps) {
+               labelSet = new ArrayList<JLabel>();
+               urlMap = new HashMap<JLabel, String>();
+               this.openBrowserServiceRef = openBrowserServiceRef;
+               this.cyProps = cyProps;
+               initComponents();
+       }
+
+       private void initComponents() {
+               this.setLayout(new GridLayout(4, 1));
+               about = new JLabel("     About Cytoscape >>");
+               manual = new JLabel("     User Documentation >>");
+               tutorial = new JLabel("     Tutorials >>");
+               bugReport = new JLabel("     Report a bug >>");
+               
+               // get Cytoscape version
+               String cyversion = 
this.cyProps.getProperties().getProperty("cytoscape.version.number");
+               
+               // get OS string
+               String os_str = System.getProperty("os.name")+ "_"+ 
System.getProperty("os.version");
+               os_str = os_str.replace(" ", "_");
+               
+               labelSet.add(about);
+               labelSet.add(manual);
+               labelSet.add(tutorial);
+               labelSet.add(bugReport);
+               urlMap.put(about, 
"http://www.cytoscape.org/what_is_cytoscape.html";);
+               urlMap.put(manual, 
"http://www.cytoscape.org/documentation_users.html";);
+               urlMap.put(tutorial, 
"http://opentutorials.cgl.ucsf.edu/index.php/Portal:Cytoscape3";);
+               urlMap.put(bugReport, 
"http://chianti.ucsd.edu/cyto_web/bugreport/bugreport.php?cyversion="+cyversion+"&os="+os_str);
+               
+               for(final JLabel label: labelSet) {
+                       label.setFont(LABEL_FONT);
+                       label.setForeground(LABEL_COLOR);
+                       label.setHorizontalAlignment(SwingConstants.LEFT);
+                       label.setHorizontalTextPosition(SwingConstants.LEFT);
+                       label.setOpaque(false);
+                       label.addMouseListener(new LabelMouseListener(label, 
urlMap.get(label), this));
+                       add(label);
+               }
+       }
+       
+       private final class LabelMouseListener extends MouseAdapter {
+               
+               private final String url;
+               
+               LabelMouseListener(final JLabel label, final String url, final 
JPanel parent) {
+                       this.url = url;
+               }
+
+               @Override
+               public void mouseClicked(MouseEvent arg0) {
+                       openBrowserServiceRef.openURL(url);                     
+               }
+       }
+       
+
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/LogoPanel.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/LogoPanel.java
                           (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/LogoPanel.java
   2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,39 @@
+package org.cytoscape.welcome.internal;
+
+import java.awt.BorderLayout;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+
+public class LogoPanel extends JPanel {
+       
+       private static final String IMAGE_LOCATION = "images/logo.png";
+       private BufferedImage bgImage;
+       
+       LogoPanel() {
+               
+               
+               initComponents();
+       }
+       
+       void initComponents() {
+               try {
+                       bgImage = 
ImageIO.read(WelcomeScreenDialog.class.getClassLoader().getResource(IMAGE_LOCATION));
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+               
+               this.setLayout(new BorderLayout());
+               JLabel logo = new JLabel();
+               logo.setIcon(new ImageIcon(bgImage));
+               logo.setHorizontalAlignment(SwingConstants.CENTER);
+               
+               this.add(logo, BorderLayout.CENTER);
+       }
+
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
                           (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/OpenPanel.java
   2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,140 @@
+package org.cytoscape.welcome.internal;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.Window;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.border.LineBorder;
+
+import org.cytoscape.application.swing.CySwingApplication;
+import org.cytoscape.io.util.RecentlyOpenedTracker;
+import org.cytoscape.session.CySession;
+import org.cytoscape.task.creation.LoadSession;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskManager;
+import org.cytoscape.work.TaskMonitor;
+
+public class OpenPanel extends JPanel {
+
+       private static final Font FILE_NAME_FONT = new Font(Font.DIALOG, 
Font.PLAIN, 12);
+       private static final String ICON_LOCATION = 
"/images/Icons/open_session.png";
+       private BufferedImage openIconImg;
+       private ImageIcon openIcon;
+
+       private static final int MAX_FILES = 5;
+
+       private JLabel open;
+
+       private final RecentlyOpenedTracker fileTracker;
+       private final TaskManager taskManager;
+       private final TaskFactory openSessionTaskFactory;
+
+       Window parent;
+
+       OpenPanel(Window parent, final RecentlyOpenedTracker fileTracker, final 
TaskManager taskManager,
+                       final TaskFactory openSessionTaskFactory) {
+               this.fileTracker = fileTracker;
+               this.parent = parent;
+               this.taskManager = taskManager;
+               this.openSessionTaskFactory = openSessionTaskFactory;
+               initComponents();
+       }
+
+       private void initComponents() {
+               try {
+                       openIconImg = 
ImageIO.read(WelcomeScreenDialog.class.getClassLoader().getResource(ICON_LOCATION));
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+
+               openIcon = new ImageIcon(openIconImg);
+
+               final List<URL> recentFiles = 
fileTracker.getRecentlyOpenedURLs();
+               final int fileCount = recentFiles.size();
+
+               this.setLayout(new GridLayout(MAX_FILES + 1, 1));
+
+               final LineBorder padLine = new LineBorder(new Color(0, 0, 0, 
0), 20, false);
+
+               for (int i = 0; i < fileCount; i++) {
+                       final URL target = recentFiles.get(i);
+                       final JLabel fileLabel = new 
JLabel(recentFiles.get(i).toString());
+
+                       fileLabel.setFont(FILE_NAME_FONT);
+                       fileLabel.setBorder(padLine);
+                       fileLabel.setHorizontalAlignment(SwingConstants.LEFT);
+                       fileLabel.addMouseListener(new MouseAdapter() {
+
+                               @Override
+                               public void mouseClicked(MouseEvent e) {
+                                        try {
+                                               final File targetFile = new 
File(target.toURI());
+                                               taskManager.execute(new 
TaskFactory() {
+                                                       @Override
+                                                       public TaskIterator 
createTaskIterator() {
+                                                               return new 
TaskIterator(new OpenSessionDirectTask(targetFile));
+                                                       }
+                                               });
+                                       } catch (URISyntaxException e1) {
+                                               e1.printStackTrace();
+                                       }
+                                       parent.dispose();
+                               }
+                       });
+
+                       this.add(fileLabel);
+               }
+               open = new JLabel("Open other...");
+               open.setIcon(openIcon);
+               open.setBorder(padLine);
+               open.setHorizontalAlignment(SwingConstants.LEFT);
+               open.addMouseListener(new MouseAdapter() {
+
+                       @Override
+                       public void mouseClicked(MouseEvent e) {
+                               parent.dispose();
+                               taskManager.execute(openSessionTaskFactory);
+                       }
+               });
+
+               this.add(open);
+       }
+
+       private final class OpenSessionDirectTask extends AbstractTask {
+               
+               private final File file;
+               
+               OpenSessionDirectTask(final File file) {
+                       this.file = file;
+               }
+               
+               @Override
+               public void run(TaskMonitor taskMonitor) throws Exception {
+                       if(openSessionTaskFactory instanceof LoadSession) {
+                               taskMonitor.setTitle("Opening Session File");
+                               taskMonitor.setProgress(0.1d);
+                               taskMonitor.setStatusMessage("Opening session 
file.  Please wait...");
+                               LoadSession loadSession = (LoadSession) 
openSessionTaskFactory;
+                               CySession session = 
loadSession.loadSession(file);
+                               taskMonitor.setProgress(1.0d);
+                       }
+               }
+
+       }
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
                         (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenAction.java
 2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,98 @@
+package org.cytoscape.welcome.internal;
+
+import java.awt.event.ActionEvent;
+import java.util.Properties;
+
+import org.cytoscape.application.CyApplicationConfiguration;
+import org.cytoscape.application.events.CyStartEvent;
+import org.cytoscape.application.swing.AbstractCyAction;
+import org.cytoscape.application.swing.CySwingApplication;
+import org.cytoscape.datasource.DataSourceManager;
+import org.cytoscape.io.util.RecentlyOpenedTracker;
+import org.cytoscape.property.CyProperty;
+import org.cytoscape.task.NetworkTaskFactory;
+import org.cytoscape.task.creation.ImportNetworksTaskFactory;
+import org.cytoscape.util.swing.OpenBrowser;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskManager;
+import org.osgi.framework.BundleContext;
+
+public class WelcomeScreenAction extends AbstractCyAction {
+
+       private static final long serialVersionUID = 2584201062371825221L;
+       
+       public static final String DO_NOT_DISPLAY_PROP_NAME = 
"hideWelcomScreen";
+
+       private static final String MENU_NAME = "Show Welcome Screen...";
+       private static final String PARENT_NAME = "Help";
+
+       private final OpenBrowser openBrowser;
+       private final RecentlyOpenedTracker fileTracker;
+       private final TaskManager guiTaskManager;
+       private final ImportNetworksTaskFactory importNetworksTaskFactory;
+       private final CyApplicationConfiguration config;
+       private final DataSourceManager dsManager;
+       
+       private final NetworkTaskFactory networkTaskFactory;
+       private final TaskFactory openSessionTaskFactory;
+       private final TaskFactory importNetworkFileTF;
+
+       private final CySwingApplication app;
+       private final CyProperty<Properties> cyProps;
+       
+       private final BundleContext bc;
+       
+       private boolean hide = false;
+
+       public WelcomeScreenAction(final BundleContext bc, final 
CySwingApplication app, 
+                       OpenBrowser openBrowserServiceRef, 
RecentlyOpenedTracker fileTracker, final TaskFactory openSessionTaskFactory, 
TaskManager guiTaskManager,
+                       final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory importNetworksTaskFactory, final NetworkTaskFactory 
networkTaskFactory,
+                       final CyApplicationConfiguration config, final 
DataSourceManager dsManager, final CyProperty<Properties> cyProps) {
+               super(MENU_NAME);
+               setPreferredMenu(PARENT_NAME);
+
+               this.openBrowser = openBrowserServiceRef;
+               this.fileTracker = fileTracker;
+               this.guiTaskManager = guiTaskManager;
+               this.importNetworksTaskFactory = importNetworksTaskFactory;
+               this.networkTaskFactory = networkTaskFactory;
+               this.config = config;
+               this.dsManager = dsManager;
+               this.app = app;
+               this.cyProps = cyProps;
+               this.openSessionTaskFactory = openSessionTaskFactory;
+               this.importNetworkFileTF = importNetworkFileTF;
+               this.bc = bc;
+               
+               // Show it if necessary
+               startup();
+       }
+
+       @Override
+       public void actionPerformed(ActionEvent ae) {
+               final WelcomeScreenDialog welcomeScreen = new 
WelcomeScreenDialog(bc,openBrowser, fileTracker, openSessionTaskFactory, 
guiTaskManager, config,
+                               importNetworkFileTF, importNetworksTaskFactory, 
networkTaskFactory, dsManager, cyProps, hide);
+               welcomeScreen.setLocationRelativeTo(app.getJFrame());
+               welcomeScreen.setVisible(true);
+               this.hide = welcomeScreen.getHideStatus();
+               
this.cyProps.getProperties().setProperty(DO_NOT_DISPLAY_PROP_NAME, 
((Boolean)hide).toString());
+       }
+       
+       public void startup() {
+               // Simply displays the dialog after startup.
+               final String hideString = 
this.cyProps.getProperties().getProperty(DO_NOT_DISPLAY_PROP_NAME);
+               
+               if (hideString == null)
+                       hide = false;
+               else {
+                       try {
+                               hide = Boolean.parseBoolean(hideString);
+                       } catch (Exception ex) {
+                               hide = false;
+                       }
+               }
+               
+               if(hide == false)
+                       actionPerformed(null);
+       }
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
===================================================================
--- 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
                         (rev 0)
+++ 
core3/impl/trunk/welcome-impl/src/main/java/org/cytoscape/welcome/internal/WelcomeScreenDialog.java
 2012-02-22 19:48:27 UTC (rev 28336)
@@ -0,0 +1,217 @@
+package org.cytoscape.welcome.internal;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.imageio.ImageIO;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.border.EmptyBorder;
+import javax.swing.border.LineBorder;
+
+import org.cytoscape.application.CyApplicationConfiguration;
+import org.cytoscape.datasource.DataSourceManager;
+import org.cytoscape.io.util.RecentlyOpenedTracker;
+import org.cytoscape.property.CyProperty;
+import org.cytoscape.task.NetworkTaskFactory;
+import org.cytoscape.task.creation.ImportNetworksTaskFactory;
+import org.cytoscape.util.swing.OpenBrowser;
+import org.cytoscape.work.TaskFactory;
+import org.cytoscape.work.TaskManager;
+import org.osgi.framework.BundleContext;
+
+public class WelcomeScreenDialog extends JDialog {
+       private static final long serialVersionUID = -2783045197802550425L;
+
+       private static final String TITLE = "Welcome to Cytoscape 3";
+
+       private static final Color PANEL_COLOR = new Color(0xff, 0xff, 0xff, 
220);
+       private static final Color LABEL_COLOR = new Color(0xa0, 0xa0, 0xa0, 
230);
+       private static final Color TRANSPARENT_COLOR = new Color(0xc0, 0xc0, 
0xc0, 0);
+
+       private static final Font TITLE_FONT = new Font("SansSerif", 
Font.PLAIN, 14);
+
+       private static final String IMAGE_LOCATION = "images/background.png";
+       private BufferedImage bgImage;
+
+       private static final Dimension DEF_SIZE = new Dimension(600, 500);
+
+       private BackgroundImagePanel basePanel;
+       private JPanel mainPanel;
+
+       private final OpenBrowser openBrowserServiceRef;
+       private final RecentlyOpenedTracker fileTracker;
+       private final TaskFactory openSessionTaskFactory;
+
+       private final TaskManager guiTaskManager;
+
+       private final CyApplicationConfiguration config;
+       private final ImportNetworksTaskFactory loadNetworkTF;
+       private final NetworkTaskFactory networkTaskFactory;
+
+       private final DataSourceManager dsManager;
+       
+       private final CyProperty<Properties> cyProps;
+       
+       private final TaskFactory importNetworkFileTF;
+       private final BundleContext bc;
+       
+       final JCheckBox checkBox = new JCheckBox();
+
+       public WelcomeScreenDialog(final BundleContext bc, OpenBrowser 
openBrowserServiceRef, RecentlyOpenedTracker fileTracker, final TaskFactory 
openSessionTaskFactory,
+                       TaskManager guiTaskManager, final 
CyApplicationConfiguration config,
+                       final TaskFactory importNetworkFileTF, final 
ImportNetworksTaskFactory importNetworkTF, final NetworkTaskFactory 
networkTaskFactory,
+                       final DataSourceManager dsManager, final 
CyProperty<Properties> cyProps, final boolean hide) {
+               this.openBrowserServiceRef = openBrowserServiceRef;
+               this.fileTracker = fileTracker;
+               this.config = config;
+               this.loadNetworkTF = importNetworkTF;
+               this.networkTaskFactory = networkTaskFactory;
+               this.dsManager = dsManager;
+               this.openSessionTaskFactory = openSessionTaskFactory;
+               this.importNetworkFileTF = importNetworkFileTF;
+               this.bc = bc;
+
+               this.guiTaskManager = guiTaskManager;
+               this.cyProps = cyProps;
+
+               initComponents();
+
+               this.setTitle(TITLE);
+
+               this.setSize(DEF_SIZE);
+               this.setPreferredSize(DEF_SIZE);
+               this.setMinimumSize(DEF_SIZE);
+               this.setMaximumSize(DEF_SIZE);
+               this.setResizable(false);
+               this.setModal(true);
+               
this.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
+               this.setAlwaysOnTop(true);
+               
+               checkBox.setSelected(hide);
+       }
+       
+       public boolean getHideStatus() {
+               return checkBox.isSelected();
+       }
+
+       private void initComponents() {
+
+               try {
+                       bgImage = 
ImageIO.read(WelcomeScreenDialog.class.getClassLoader().getResource(IMAGE_LOCATION));
+               } catch (IOException e) {
+                       e.printStackTrace();
+               }
+
+               basePanel = new BackgroundImagePanel(bgImage);
+               basePanel.setBackground(new Color(0xaa, 0xaa, 0xaa, 30));
+               basePanel.setLayout(new BorderLayout());
+
+               mainPanel = new JPanel();
+               mainPanel.setSize(DEF_SIZE);
+               mainPanel.setLayout(new GridLayout(2, 2));
+               mainPanel.setOpaque(false);
+
+               basePanel.add(mainPanel, BorderLayout.CENTER);
+
+               final JPanel bottomPanel = new JPanel();
+               bottomPanel.setLayout(new BorderLayout());
+               bottomPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
+               bottomPanel.setBackground(PANEL_COLOR);
+               
+               checkBox.setText("Don't show again");
+               checkBox.addActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent ae) {
+                               
cyProps.getProperties().setProperty(WelcomeScreenAction.DO_NOT_DISPLAY_PROP_NAME,
 ((Boolean)checkBox.isSelected()).toString());
+                       }
+               });
+               
+               JButton closeButton = new JButton("Close");
+               closeButton.addActionListener(new ActionListener() {
+                       @Override
+                       public void actionPerformed(ActionEvent e) {
+                               dispose();
+                       }
+               });
+               bottomPanel.add(checkBox, BorderLayout.CENTER);
+               bottomPanel.add(closeButton, BorderLayout.EAST);
+               checkBox.setHorizontalAlignment(SwingConstants.CENTER);
+               basePanel.add(bottomPanel, BorderLayout.SOUTH);
+
+               this.add(basePanel);
+               createChildPanels();
+
+               pack();
+       }
+
+       private void createChildPanels() {
+               JPanel panel1 = new JPanel();
+               JPanel panel2 = new JPanel();
+               JPanel panel3 = new JPanel();
+               JPanel panel4 = new JPanel();
+
+               panel1.setOpaque(false);
+               panel2.setOpaque(false);
+               panel3.setOpaque(false);
+               panel4.setOpaque(false);
+
+               Color borderPaint = new Color(0xff, 0xff, 0xff, 50);
+               final LineBorder border = new LineBorder(borderPaint, 10, 
false);
+               panel1.setBorder(border);
+               panel2.setBorder(border);
+               panel3.setBorder(border);
+               panel4.setBorder(border);
+
+               panel1.setBackground(PANEL_COLOR);
+               panel2.setBackground(PANEL_COLOR);
+               panel3.setBackground(PANEL_COLOR);
+               panel4.setBackground(PANEL_COLOR);
+
+               buildHelpPanel(panel1, new OpenPanel(this, fileTracker, 
guiTaskManager, openSessionTaskFactory),
+                               "Open a Recent Session");
+               buildHelpPanel(panel2,
+                               new CreateNewNetworkPanel(this, bc, 
guiTaskManager, importNetworkFileTF, loadNetworkTF, networkTaskFactory,
+                                               config, dsManager, 
cyProps.getProperties()),
+                               "Create New Network");
+               buildHelpPanel(panel3, new HelpPanel(openBrowserServiceRef, 
cyProps), "Help");
+               buildHelpPanel(panel4, new LogoPanel(), "Latest News");
+
+               mainPanel.setBorder(border);
+
+               mainPanel.add(panel1);
+               mainPanel.add(panel2);
+               mainPanel.add(panel3);
+               mainPanel.add(panel4);
+       }
+
+       private void buildHelpPanel(JPanel panel, JPanel contentPanel, final 
String label) {
+               JPanel titlePanel = new JPanel();
+               contentPanel.setBackground(PANEL_COLOR);
+
+               titlePanel.setLayout(new GridLayout(1, 2));
+               titlePanel.setBackground(LABEL_COLOR);
+               panel.setLayout(new BorderLayout());
+
+               final JLabel title = new JLabel();
+               title.setFont(TITLE_FONT);
+               title.setText(label);
+               title.setForeground(Color.DARK_GRAY);
+               title.setBorder(new LineBorder(TRANSPARENT_COLOR, 8, false));
+               titlePanel.add(title);
+               panel.add(titlePanel, BorderLayout.NORTH);
+               panel.add(contentPanel, BorderLayout.CENTER);
+       }
+}

Added: 
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/net_db_import_small.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/net_db_import_small.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: 
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/net_file_import_small.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/net_file_import_small.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: 
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/open_session.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/welcome-impl/src/main/resources/images/Icons/open_session.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: core3/impl/trunk/welcome-impl/src/main/resources/images/background.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/welcome-impl/src/main/resources/images/background.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: core3/impl/trunk/welcome-impl/src/main/resources/images/logo.png
===================================================================
(Binary files differ)


Property changes on: 
core3/impl/trunk/welcome-impl/src/main/resources/images/logo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to