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 @ 47845

History | View | Annotate | Download (5.54 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 isFilled() {
84
        return true;
85
    }
86

    
87

    
88
    @Override
89
    public boolean requestAuthenticationConfig() {
90
        return true;
91
    }
92
    
93
    @Override
94
    public Object clone() throws CloneNotSupportedException {
95
        return (DownloaderAuthenticationConfig) super.clone(); 
96
    }
97

    
98
    @Override
99
    public String getKey() {
100
        return "ServiceUrl="+this.getServiceUrl();
101
    }
102

    
103
    @Override
104
    public void fromJson(JsonObject json) {
105
        this.serviceUrl = json.getString(CONFIG_SERVICEURL_NAME,null);
106
        String providerName = json.getString(CONFIG_PROVIDERNAME_NAME, null);
107
        if( providerName != null ) {
108
            if( !StringUtils.equalsIgnoreCase(this.providerName, providerName) ) {
109
                throw new IllegalArgumentException("this json can't be restored in a config of '"+this.providerName+"' (need a '"+providerName+"')");
110
            }
111
        }
112
    }
113

    
114
    @Override
115
    public JsonObjectBuilder toJsonBuilder() {
116
        JsonObjectBuilder builder = Json.createObjectBuilder();
117
        builder.add(CONFIG_PROVIDERNAME_NAME, this.getFactory().getProviderName());
118
        builder.add("serviceUrl",this.serviceUrl);
119
        
120
        return builder;        
121
    }
122

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

    
152
    @Override
153
    public void saveToState(PersistentState state) throws PersistenceException {
154
        state.set(CONFIG_PROVIDERNAME_NAME,this.providerName);
155
        state.set(CONFIG_SERVICEURL_NAME,this.serviceUrl);
156
    }
157

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