Project

General

Profile

Download (5.28 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.update;
2

    
3
import java.net.URI;
4
import java.net.URISyntaxException;
5
import java.util.ArrayList;
6
import java.util.List;
7

    
8
import org.eclipse.equinox.internal.p2.ui.ProvUI;
9
import org.eclipse.equinox.internal.p2.ui.model.ElementUtils;
10
import org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement;
11
import org.eclipse.equinox.p2.repository.IRepository;
12
import org.eclipse.equinox.p2.repository.IRepositoryManager;
13
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepositoryManager;
14
import org.eclipse.equinox.p2.ui.ProvisioningUI;
15

    
16
import eu.etaxonomy.taxeditor.TaxonomicEditorPlugin;
17
import eu.etaxonomy.taxeditor.model.MessagingUtils;
18
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
19
import eu.etaxonomy.taxeditor.util.ApplicationUtil;
20

    
21
/**
22
 * This class is a utility class for updating the editor from a p2 update site,
23
 * greatly inspired by the links given below.
24
 *
25
 *
26
 * To Do :
27
 * - Allow configurable update sites
28
 *
29
 * Notes :
30
 *
31
 *
32
 * @see http://wiki.eclipse.org/Equinox/p2/Adding_Self-Update_to_an_RCP_Application
33
 * @see http://bugs.eclipse.org/281226
34
 * @see http://www.vogella.com/tutorials/EclipseP2Update/article.html
35
 */
36
public class P2Util {
37

    
38
    //private static String LOCAL_UPDATE_SITE = "file:///path/.../to/Development/EDIT/taxeditor/eu.etaxonomy.taxeditor/target/repository/";
39

    
40
    private static String EDIT_NIGHTLY_UPDATE_SITE = "http://cybertaxonomy.eu/download/taxeditor/update/nightly/";
41
    private static String EDIT_NIGHTLY_UPDATE_SITE_NAME = "Taxonomic Editor Nightly";
42

    
43
    private static String EDIT_SNAPSHOT_UPDATE_SITE = "http://cybertaxonomy.eu/download/taxeditor/update/snapshot/";
44
    private static String EDIT_SNAPSHOT_UPDATE_SITE_NAME = "Taxonomic Editor Snapshot";
45

    
46
    private static String EDIT_STABLE_UPDATE_SITE = "http://cybertaxonomy.eu/download/taxeditor/update/stable/";
47
    private static String EDIT_STABLE_UPDATE_SITE_NAME = "Taxonomic Editor Stable";
48

    
49
    /**
50
     * Retrieve and load the saved list of repositories from the preference store,
51
     * making sure that at least the default repository is always loaded.
52
     */
53
    @SuppressWarnings("restriction")
54
    public static void setP2UpdateRepositories() {
55
        String updateSite = EDIT_NIGHTLY_UPDATE_SITE;
56
        String updateSiteName = EDIT_NIGHTLY_UPDATE_SITE_NAME;
57

    
58
        if(ApplicationUtil.isStable()) {
59
            updateSite = EDIT_STABLE_UPDATE_SITE;
60
            updateSiteName = EDIT_STABLE_UPDATE_SITE_NAME;
61
        }
62
        List<MetadataRepositoryElement> repoElements = new ArrayList<MetadataRepositoryElement>();
63
        List<MetadataRepositoryElement> savedRepoElements = PreferencesUtil.getP2Repositories();
64
        if(savedRepoElements.isEmpty()) {
65
            // we always need an update site, so we add the default one
66
            try {
67
                MetadataRepositoryElement element = new MetadataRepositoryElement(null, new URI(updateSite), true);
68
                element.setNickname(updateSiteName);
69
                repoElements.add(element);
70
            } catch (URISyntaxException e) {
71
                MessagingUtils.errorDialog("Invalid update site URI",
72
                        P2Util.class,
73
                        "The update site URI has an invalid syntax",
74
                        TaxonomicEditorPlugin.PLUGIN_ID,
75
                        e,
76
                        false);
77
            }
78
        }
79
        repoElements.addAll(savedRepoElements);
80

    
81
        ElementUtils.updateRepositoryUsingElements(ProvisioningUI.getDefaultUI(),repoElements
82
                .toArray(new MetadataRepositoryElement[]{} ));
83

    
84
    }
85

    
86
    /**
87
     * {@link org.eclipse.equinox.p2.ui.RepositoryManipulationPage} which handles the repsitory site list
88
     * in preferences does not create a preference store and hence the changes are not saved. This means
89
     * that we need to save it ourselves.
90
     *
91
     * This method saves the list of current repositories in the preference store as a string with
92
     * specific delimiters.
93
     */
94

    
95
    public static void saveP2RepositoryPreferences() {
96

    
97
        IMetadataRepositoryManager metaManager = ProvUI.getMetadataRepositoryManager(ProvisioningUI.getDefaultUI().getSession());
98

    
99
        URI[] currentlyEnabled = metaManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
100
        URI[] currentlyDisabled = metaManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_DISABLED);
101

    
102
        List<MetadataRepositoryElement> repoElements = new ArrayList<MetadataRepositoryElement>();
103

    
104
        for(URI repo : currentlyEnabled) {
105
            boolean enabled = true;
106
            String nickname = metaManager.getRepositoryProperty(repo, IRepository.PROP_NICKNAME);
107
            MetadataRepositoryElement element = new MetadataRepositoryElement(null, repo, true);
108
            element.setNickname(nickname);
109
            element.setEnabled(enabled);
110
            repoElements.add(element);
111
        }
112

    
113
        for(URI repo : currentlyDisabled) {
114
            boolean enabled = false;
115
            String nickname = metaManager.getRepositoryProperty(repo, IRepository.PROP_NICKNAME);
116
            MetadataRepositoryElement element = new MetadataRepositoryElement(null, repo, true);
117
            element.setNickname(nickname);
118
            element.setEnabled(enabled);
119
            repoElements.add(element);
120
        }
121
        PreferencesUtil.setP2Repositories(repoElements);
122
    }
123
}
    (1-1/1)