Project

General

Profile

Download (4.53 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.handler.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.model.MessagingUtils;
17
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
18
import eu.etaxonomy.taxeditor.util.ApplicationUtil;
19

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

    
35
    private static String EDIT_NIGHTLY_UPDATE_SITE = "https://cybertaxonomy.org/download/taxeditor/update/nightly/";
36
    private static String EDIT_NIGHTLY_UPDATE_SITE_NAME = "Taxonomic Editor Nightly";
37

    
38
    private static String EDIT_STABLE_UPDATE_SITE = "https://cybertaxonomy.org/download/taxeditor/update/stable/";
39
    private static String EDIT_STABLE_UPDATE_SITE_NAME = "Taxonomic Editor Stable";
40

    
41
    /**
42
     * Retrieve and load the saved list of repositories from the preference store,
43
     * making sure that at least the default repository is always loaded.
44
     */
45
    @SuppressWarnings("restriction")
46
    public static void setP2UpdateRepositories() {
47
        List<MetadataRepositoryElement> repoElements = new ArrayList<>();
48
        List<MetadataRepositoryElement> savedRepoElements = new ArrayList<>();
49

    
50
        MetadataRepositoryElement mre = new MetadataRepositoryElement(null, getP2UpdateRepository(), true);
51
        mre.setNickname(getP2UpdateRepositoryName());
52
        savedRepoElements.add(mre);
53

    
54
        repoElements.addAll(savedRepoElements);
55

    
56
        ElementUtils.updateRepositoryUsingElements(ProvisioningUI.getDefaultUI(),repoElements
57
                .toArray(new MetadataRepositoryElement[]{} ));
58
    }
59

    
60
    public static String getP2UpdateRepositoryName(){
61
        return ApplicationUtil.isStable()? EDIT_STABLE_UPDATE_SITE_NAME : EDIT_NIGHTLY_UPDATE_SITE_NAME;
62
    }
63

    
64
    public static URI getP2UpdateRepository(){
65
        try {
66
            return ApplicationUtil.isStable()? new URI(EDIT_STABLE_UPDATE_SITE) : new URI(EDIT_NIGHTLY_UPDATE_SITE);
67
        } catch (URISyntaxException e) {
68
            MessagingUtils.error(P2Util.class, e);
69
        }
70
        return null;
71
    }
72

    
73
    /**
74
     * {@link org.eclipse.equinox.p2.ui.RepositoryManipulationPage} which handles the repsitory site list
75
     * in preferences does not create a preference store and hence the changes are not saved. This means
76
     * that we need to save it ourselves.
77
     *
78
     * This method saves the list of current repositories in the preference store as a string with
79
     * specific delimiters.
80
     */
81

    
82
    public static void saveP2RepositoryPreferences() {
83

    
84
        IMetadataRepositoryManager metaManager = ProvUI.getMetadataRepositoryManager(ProvisioningUI.getDefaultUI().getSession());
85

    
86
        URI[] currentlyEnabled = metaManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_ALL);
87
        URI[] currentlyDisabled = metaManager.getKnownRepositories(IRepositoryManager.REPOSITORIES_DISABLED);
88

    
89
        List<MetadataRepositoryElement> repoElements = new ArrayList<>();
90

    
91
        for(URI repo : currentlyEnabled) {
92
            boolean enabled = true;
93
            String nickname = metaManager.getRepositoryProperty(repo, IRepository.PROP_NICKNAME);
94
            MetadataRepositoryElement element = new MetadataRepositoryElement(null, repo, true);
95
            element.setNickname(nickname);
96
            element.setEnabled(enabled);
97
            repoElements.add(element);
98
        }
99

    
100
        for(URI repo : currentlyDisabled) {
101
            boolean enabled = false;
102
            String nickname = metaManager.getRepositoryProperty(repo, IRepository.PROP_NICKNAME);
103
            MetadataRepositoryElement element = new MetadataRepositoryElement(null, repo, true);
104
            element.setNickname(nickname);
105
            element.setEnabled(enabled);
106
            repoElements.add(element);
107
        }
108
        PreferencesUtil.setP2Repositories(repoElements);
109
    }
110
}
(1-1/3)