View Javadoc

1   package uk.ac.cam.spectra.spectrasub.pages;
2   
3   import java.io.File;
4   import java.io.FileOutputStream;
5   import java.io.IOException;
6   import java.io.InputStream;
7   import java.util.HashMap;
8   import java.util.Map;
9   
10  import org.apache.commons.io.IOUtils;
11  import org.apache.log4j.Logger;
12  import org.apache.tapestry.IPage;
13  import org.apache.tapestry.PageRedirectException;
14  import org.apache.tapestry.annotations.InjectObject;
15  import org.apache.tapestry.annotations.InjectPage;
16  import org.apache.tapestry.form.IPropertySelectionModel;
17  import org.apache.tapestry.form.StringPropertySelectionModel;
18  import org.apache.tapestry.web.WebContext;
19  
20  import uk.ac.cam.spectra.spectrasub.Constants;
21  import uk.ac.cam.spectra.spectrasub.servlet.SpectraContextLoader;
22  
23  public abstract class ConfigureProfile extends BaseSPECTRaSubPage {
24  
25      private static final String GAUSSIAN = "Computational Chemistry (Gaussian files)";
26  
27      private static final String NMR = "NMR Spectra (JDX + MOL)";
28  
29      private static final String CIF = "X-Ray Crystallography (CIF)";
30  
31      private static final Logger LOG = Logger.getLogger(ConfigureProfile.class);
32  
33      private static Map<String, String> PROFILES = new HashMap<String, String>();
34  
35      private static Map<String, String> CONFIGS = new HashMap<String, String>();
36  
37      static {
38          PROFILES.put(GAUSSIAN, "profile-compchem.xml");
39          PROFILES.put(NMR, "profile-nmr.xml");
40          PROFILES.put(CIF, "profile-cif.xml");
41          CONFIGS.put(GAUSSIAN, "config-compchem.properties");
42          CONFIGS.put(NMR, "config-nmr.properties");
43          CONFIGS.put(CIF, "config-cif.properties");
44      }
45  
46      public static IPropertySelectionModel EXISTING_PROFILES = new StringPropertySelectionModel(
47              new String[] { CIF, NMR, GAUSSIAN });
48  
49      public abstract String getExistingProfile();
50  
51      public void existingClicked() {
52          // Copy the relevant profile into workspace/profile.xml
53          WebContext ctx = getWebContext();
54          File workspace = new File((String) ctx
55                  .getAttribute(Constants.WORKSPACE_ATTRIBUTE));
56          File profile = new File(workspace, Constants.PROFILE_FILENAME);
57          String profileName = PROFILES.get(getExistingProfile());
58          FileOutputStream fos = null;
59          InputStream in = null;
60          try {
61              profile.createNewFile();
62  
63              LOG.debug("Using existing profile: " + profileName);
64              in = Thread.currentThread().getContextClassLoader()
65                      .getResourceAsStream(profileName);
66              fos = new FileOutputStream(profile);
67              IOUtils.copy(in, fos);
68          } catch (IOException e) {
69              LOG.error("Problem creating profile file: " + e.getMessage(), e);
70              throw new RuntimeException("Problem creating profile file: "
71                      + e.getMessage(), e);
72          } finally {
73              IOUtils.closeQuietly(in);
74              IOUtils.closeQuietly(fos);
75          }
76          File config = new File(workspace, Constants.CONFIG_PROPERTY_FILENAME);
77  
78          if (!config.exists()) {
79              FileOutputStream fo = null;
80              InputStream in2 = null;
81              try {
82                  config.createNewFile();
83                  fo = new FileOutputStream(config);
84                  String propName = CONFIGS.get(getExistingProfile());
85                  in2 = Thread.currentThread().getContextClassLoader()
86                          .getResourceAsStream(propName);
87                  IOUtils.copy(in2, fo);
88              } catch (IOException e) {
89                  throw new RuntimeException("Problem creating config props file: "+ e.getMessage(), e);
90              } finally {
91                  IOUtils.closeQuietly(fo);
92              }
93          }
94          new SpectraContextLoader().checkAndReconfigure(getWebContext());
95          throw new PageRedirectException(getConfigurationComplete());
96      }
97  
98      @InjectPage("ConfigurationComplete")
99      public abstract IPage getConfigurationComplete();
100 
101     @InjectObject("service:tapestry.globals.WebContext")
102     public abstract WebContext getWebContext();
103 
104     public void customClicked() {
105         new SpectraContextLoader().checkAndReconfigure(getWebContext());
106         throw new PageRedirectException(getConfigurationComplete());
107     }
108 }