Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.downloader / org.gvsig.downloader.lib / org.gvsig.downloader.lib.api / src / main / java / org / gvsig / downloader / spi / AbstractDownloaderAuthenticationConfig.java @ 47841

History | View | Annotate | Download (5.46 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.downloader.spi;
7

    
8
import java.net.URL;
9
import javax.json.JsonObject;
10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.downloader.DownloaderAuthenticationConfig;
12
import org.gvsig.downloader.DownloaderAuthenticationFactory;
13
import org.gvsig.downloader.DownloaderLocator;
14
import org.gvsig.downloader.DownloaderManager;
15
import org.gvsig.json.Json;
16
import org.gvsig.json.JsonObjectBuilder;
17
import org.gvsig.tools.ToolsLocator;
18
import org.gvsig.tools.dynobject.DynStruct;
19
import org.gvsig.tools.persistence.PersistenceManager;
20
import org.gvsig.tools.persistence.PersistentState;
21
import org.gvsig.tools.persistence.exception.PersistenceException;
22

    
23
/**
24
 *
25
 * @author jjdelcerro
26
 */
27
public abstract class AbstractDownloaderAuthenticationConfig 
28
        implements DownloaderAuthenticationConfig
29
    {
30

    
31
    protected final String providerName;
32
    private DownloaderAuthenticationFactory factory;
33
    protected String serviceUrl;
34

    
35
    protected AbstractDownloaderAuthenticationConfig(String providerName, DownloaderAuthenticationFactory factory, String serviceUrl) {
36
        this(providerName);
37
        this.factory = factory;
38
        this.serviceUrl = this.getUrlWithoutQuery(serviceUrl);
39
    }
40

    
41
    protected AbstractDownloaderAuthenticationConfig(String providerName) {
42
        this.providerName = providerName;
43
        if(StringUtils.isBlank(this.providerName)){
44
            throw new IllegalArgumentException("providerName can't be blank");
45
        }
46
        this.factory = null;
47
        this.serviceUrl = null;
48
    }
49

    
50
//    public AbstractDownloaderAuthenticationConfig(String providerName, String baseUrl) {
51
//        this(
52
//                DownloaderLocator.getDownloaderManager().getAuthenticationType(providerName),
53
//                baseUrl
54
//        );
55
//    }
56
//    
57
    @Override
58
    public String getProviderName() {
59
        return this.providerName;
60
    }
61

    
62
    @Override
63
    public DownloaderAuthenticationFactory getFactory() {
64
        if( this.factory == null ) {
65
            DownloaderManager manager = DownloaderLocator.getDownloaderManager();
66
            this.factory = manager.getDownloaderAuthenticationFactory(this.providerName);
67
        } 
68
        
69
        return this.factory;
70
    }
71

    
72
    @Override
73
    public String getServiceUrl() {
74
        return this.serviceUrl;
75
    }
76

    
77
    @Override
78
    public boolean isConfigurable() {
79
        return false;
80
    }
81

    
82
    @Override
83
    public boolean requestAuthenticationConfig() {
84
        return true;
85
    }
86
    
87
    @Override
88
    public Object clone() throws CloneNotSupportedException {
89
        return (DownloaderAuthenticationConfig) super.clone(); 
90
    }
91

    
92
    @Override
93
    public String getKey() {
94
        return "ServiceUrl="+this.getServiceUrl();
95
    }
96

    
97
    @Override
98
    public void fromJson(JsonObject json) {
99
        this.serviceUrl = json.getString(CONFIG_SERVICEURL_NAME,null);
100
        String providerName = json.getString(CONFIG_PROVIDERNAME_NAME, null);
101
        if( providerName != null ) {
102
            if( !StringUtils.equalsIgnoreCase(this.providerName, providerName) ) {
103
                throw new IllegalArgumentException("this json can't be restored in a config of '"+this.providerName+"' (need a '"+providerName+"')");
104
            }
105
        }
106
    }
107

    
108
    @Override
109
    public JsonObjectBuilder toJsonBuilder() {
110
        JsonObjectBuilder builder = Json.createObjectBuilder();
111
        builder.add(CONFIG_PROVIDERNAME_NAME, this.getFactory().getProviderName());
112
        builder.add("serviceUrl",this.serviceUrl);
113
        
114
        return builder;        
115
    }
116

    
117
    private String getUrlWithoutQuery(URL url) {
118
        try {
119
            URL x = new URL(url.getProtocol(), url.getHost(), url.getPath());
120
            return x.toExternalForm();
121
        } catch(Exception ex) {
122
            return null;
123
        }
124
    }
125
    
126
    private String getUrlWithoutQuery(String url) {
127
        try {
128
            return this.getUrlWithoutQuery(new URL(url));
129
        } catch(Exception ex) {
130
            return null;
131
        }
132
    }
133
    
134
    public static void selfRegister() {
135
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
136
        if (manager.getDefinition(PERSISTENT_DEFINITION_NAME) == null) {
137
            DynStruct definition = manager.addDefinition(DownloaderAuthenticationConfig.class,
138
                    PERSISTENT_DEFINITION_NAME, 
139
                    "DownloaderAuthenticationConfig persistence definition", null, null
140
            );            
141
            definition.addDynFieldString(CONFIG_PROVIDERNAME_NAME);
142
            definition.addDynFieldString(CONFIG_SERVICEURL_NAME);
143
        }
144
    }
145

    
146
    @Override
147
    public void saveToState(PersistentState state) throws PersistenceException {
148
        state.set(CONFIG_PROVIDERNAME_NAME,this.providerName);
149
        state.set(CONFIG_SERVICEURL_NAME,this.serviceUrl);
150
    }
151

    
152
    @Override
153
    public void loadFromState(PersistentState state) throws PersistenceException {
154
        String providerName = state.getString(CONFIG_PROVIDERNAME_NAME);
155
        if( providerName != null ) {
156
            if( !StringUtils.equalsIgnoreCase(this.providerName, providerName) ) {
157
                throw new IllegalArgumentException("this state can't be restored in a config of '"+this.providerName+"' (need a '"+providerName+"')");
158
            }
159
        }
160
        
161
        this.serviceUrl = state.getString(CONFIG_SERVICEURL_NAME);
162
    }
163
    
164
    
165
    
166
}