package org.openflexo.br; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.Map; import org.apache.commons.codec.binary.Base64; import org.openflexo.AdvancedPrefs; import org.openflexo.toolbox.FileResource; import org.openflexo.toolbox.FileUtils; import org.openflexo.ws.jira.JIRAGson; import org.openflexo.ws.jira.model.JIRAProject; import org.openflexo.ws.jira.model.JIRAProjectList; import com.google.gson.JsonIOException; import com.google.gson.JsonSyntaxException; public class BugReportManager { private static final File PROJECT_FILE = new FileResource("Config/jira_openflexo_project.json"); private static final String OPENFLEXO_KEY = "OPENFLEXO"; private static final BugReportManager instance = new BugReportManager(); public static BugReportManager getInstance() { return instance; } private File userProjectFile; private JIRAProject project; BugReportManager() { userProjectFile = new File(FileUtils.getApplicationDataDirectory(), PROJECT_FILE.getName()); if (!userProjectFile.exists()) { copyOriginalToUserFile(); } try { Map<String, String> headers = new HashMap<String, String>(); if (AdvancedPrefs.getBugReportUser() != null && AdvancedPrefs.getBugReportUser().trim().length() > 0 && AdvancedPrefs.getBugReportPassword() != null && AdvancedPrefs.getBugReportPassword().trim().length() > 0) { try { headers.put( "Authorization", "Basic " + Base64.encodeBase64String((AdvancedPrefs.getBugReportUser() + ":" + AdvancedPrefs .getBugReportPassword()).getBytes("ISO-8859-1"))); } catch (UnsupportedEncodingException e) { } FileUtils.createOrUpdateFileFromURL(new URL(AdvancedPrefs.getBugReportUrl() + "/rest/api/2/issue/createmeta?expand=projects.issuetypes.fields&projectKey=" + OPENFLEXO_KEY), userProjectFile, headers); } } catch (MalformedURLException e) { e.printStackTrace(); } project = loadProjectsFromFile(userProjectFile); if (project == null) { copyOriginalToUserFile(); project = loadProjectsFromFile(PROJECT_FILE); } } public JIRAProject getOpenFlexoProject() { return project; } private void copyOriginalToUserFile() { try { FileUtils.copyFileToFile(PROJECT_FILE, userProjectFile); } catch (IOException e) { e.printStackTrace(); } } public JIRAProject loadProjectsFromFile(File file) { try { JIRAProjectList projects = JIRAGson.getInstance().fromJson(new InputStreamReader(new FileInputStream(file)), JIRAProjectList.class); for (JIRAProject p : projects.getProjects()) { if (p.getKey().equals(OPENFLEXO_KEY)) { return project = p; } } } catch (JsonSyntaxException e) { e.printStackTrace(); } catch (JsonIOException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } return null; } }