View Javadoc
1   package com.atlassian.activeobjects.backup;
2   
3   import com.atlassian.activeobjects.admin.PluginToTablesMapping;
4   import com.atlassian.activeobjects.ao.PrefixedSchemaConfiguration;
5   import com.atlassian.activeobjects.osgi.ActiveObjectsServiceFactory;
6   import com.atlassian.activeobjects.spi.NullBackupProgressMonitor;
7   import com.atlassian.activeobjects.test.model.Model;
8   import com.atlassian.dbexporter.ImportExportErrorService;
9   import com.atlassian.plugin.PluginAccessor;
10  import com.google.common.collect.ImmutableMap;
11  import net.java.ao.EntityManager;
12  import net.java.ao.atlassian.AtlassianFieldNameConverter;
13  import net.java.ao.builder.EntityManagerBuilder;
14  import net.java.ao.test.jdbc.Hsql;
15  import net.java.ao.test.jdbc.JdbcConfiguration;
16  import net.java.ao.test.jdbc.MySql;
17  import net.java.ao.test.jdbc.Oracle;
18  import net.java.ao.test.jdbc.Postgres;
19  import net.java.ao.test.jdbc.SqlServer;
20  
21  import java.io.BufferedReader;
22  import java.io.ByteArrayOutputStream;
23  import java.io.IOException;
24  import java.io.InputStreamReader;
25  import java.util.Map;
26  
27  import static org.mockito.Mockito.mock;
28  
29  public final class CreateBackup {
30      private final static ImmutableMap<String, JdbcConfiguration> JDBC = ImmutableMap.<String, JdbcConfiguration>builder()
31              .put("hsql", new Hsql())
32              .put("mysql", new MySql())
33              .put("postgres", new Postgres())
34              .put("oracle", new Oracle())
35              .put("sqlserver", new SqlServer())
36              .build();
37  
38      private static final String CUSTOM = "custom";
39  
40      public static void main(String[] args) throws Exception {
41          final ImportExportErrorService errorService = new ImportExportErrorServiceImpl(new PluginInformationFactory(mock(PluginToTablesMapping.class), mock(PluginAccessor.class)));
42  
43          final JdbcConfiguration jdbc = selectJdbcDriver();
44  
45          final EntityManager entityManager = newEntityManager(jdbc);
46  
47          final Model model = new Model(entityManager);
48          model.createData();
49  
50          final ByteArrayOutputStream stream = new ByteArrayOutputStream();
51          new ActiveObjectsBackup(entityManager.getProvider(), entityManager.getNameConverters(), errorService, mock(ActiveObjectsServiceFactory.class)).save(stream, NullBackupProgressMonitor.INSTANCE);
52  
53          System.out.println(stream.toString("UTF-8"));
54      }
55  
56      private static EntityManager newEntityManager(JdbcConfiguration jdbc) {
57          return EntityManagerBuilder
58                  .url(jdbc.getUrl())
59                  .username(jdbc.getUsername())
60                  .password(jdbc.getPassword())
61                  .auto()
62                  .tableNameConverter(new BackupActiveObjectsTableNameConverter())
63                  .fieldNameConverter(new AtlassianFieldNameConverter())
64                  .schemaConfiguration(new PrefixedSchemaConfiguration(ActiveObjectsBackup.PREFIX))
65                  .build();
66      }
67  
68      private static JdbcConfiguration selectJdbcDriver() throws IOException {
69          final String choice = chooseJdbcConfiguration();
70          if (CUSTOM.equalsIgnoreCase(choice)) {
71              return customJdbc();
72          } else if (JDBC.containsKey(choice)) {
73              return JDBC.get(choice);
74          } else {
75              System.out.println("Please choose a valid JDBC configuration!");
76              return selectJdbcDriver();
77          }
78      }
79  
80      private static JdbcConfiguration customJdbc() throws IOException {
81          final String url = prompt("Url:");
82          final String username = prompt("Username:", "ao_user");
83          final String password = prompt("Password:", "ao_password");
84          final String schema = prompt("Schema:", "");
85  
86          return new JdbcConfiguration() {
87              @Override
88              public String getUrl() {
89                  return url;
90              }
91  
92              @Override
93              public String getSchema() {
94                  return schema;
95              }
96  
97              @Override
98              public String getUsername() {
99                  return username;
100             }
101 
102             @Override
103             public String getPassword() {
104                 return password;
105             }
106 
107             @Override
108             public void init() {
109             }
110         };
111     }
112 
113     private static String chooseJdbcConfiguration() throws IOException {
114         final StringBuilder sb = new StringBuilder();
115         for (Map.Entry<String, JdbcConfiguration> configs : JDBC.entrySet()) {
116             final JdbcConfiguration jdbc = configs.getValue();
117             sb.append(configs.getKey()).append(": ")
118                     .append(jdbc.getUrl()).append(" - <")
119                     .append(jdbc.getSchema()).append("> - ")
120                     .append(jdbc.getUsername()).append(" - ")
121                     .append(jdbc.getPassword()).append("\n");
122         }
123         sb.append(CUSTOM).append("\n");
124 
125         return prompt("Choose a configuration:\n" + sb, JDBC.keySet().iterator().next());
126     }
127 
128     private static String prompt(String message) throws IOException {
129         return prompt(message, null);
130     }
131 
132     private static String prompt(String message, String defaultValue) throws IOException {
133         System.out.println(isNotEmpty(defaultValue) ? message + "[" + defaultValue + "]" : message);
134         final String value = new BufferedReader(new InputStreamReader(System.in)).readLine();
135         return isNotEmpty(value) ? value : defaultValue;
136     }
137 
138     private static boolean isNotEmpty(String s) {
139         return s != null && !s.equals("");
140     }
141 }