Statistics
| Revision:

gvsig-projects-pool / org.gvsig.online / trunk / org.gvsig.online / org.gvsig.online.swing / org.gvsig.online.swing.scribejava / src / main / java / org / gvsig / online / swing / scribejava / keycloak / UserIdentificationKeycloakConfig.java @ 9514

History | View | Annotate | Download (6.35 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.online.swing.scribejava.keycloak;
7

    
8
import java.awt.event.ActionEvent;
9
import javax.json.JsonObject;
10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.json.JsonObjectBuilder;
12
import org.gvsig.online.lib.api.OnlineLocator;
13
import org.gvsig.online.lib.api.OnlineUserIdentificationRequester;
14
import org.gvsig.online.lib.api.OnlineUserIdentificationRequester.OnlineUserIdentificationRequesterConfig;
15
import org.gvsig.online.lib.spi.AbstractOnlineUserIdentificationRequesterConfig;
16
import org.gvsig.tools.ToolsLocator;
17
import org.gvsig.tools.dynobject.DynStruct;
18
import org.gvsig.tools.persistence.PersistenceManager;
19
import org.gvsig.tools.persistence.Persistent;
20
import org.gvsig.tools.persistence.PersistentState;
21
import org.gvsig.tools.persistence.exception.PersistenceException;
22
import org.gvsig.tools.swing.api.ToolsSwingLocator;
23
import org.gvsig.tools.swing.api.windowmanager.Dialog;
24
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
25
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
26
import org.gvsig.tools.util.LabeledValue;
27

    
28
/**
29
 *
30
 * @author jjdelcerro
31
 */
32
public class UserIdentificationKeycloakConfig 
33
        extends AbstractOnlineUserIdentificationRequesterConfig
34
        implements OnlineUserIdentificationRequesterConfig, Persistent, LabeledValue<OnlineUserIdentificationRequesterConfig>
35
    {
36
    
37
    private static final String PERSISTENT_DEFINITION_NAME = "UserIdentificationKeycloakConfig";
38
    
39
    private String realm;
40
    private String baseurl;
41
    private int localPort;
42
    
43
    public UserIdentificationKeycloakConfig(UserIdentificationKeycloakFactory factory, String urlOnline) {
44
        super(factory,urlOnline);
45
        this.localPort = 8888;
46
        this.realm = null;
47
        this.baseurl = null;
48
    }
49
    
50
    public UserIdentificationKeycloakFactory getFactory() {
51
        return (UserIdentificationKeycloakFactory) super.getFactory();
52
    }
53

    
54
    public int getLocalPort() {
55
        return localPort;
56
    }
57

    
58
    public String getBaseurl() {
59
        return baseurl;
60
    }
61

    
62
    public String getRealm() {
63
        return realm;
64
    }
65

    
66
    public void setBaseurl(String baseurl) {
67
        this.baseurl = baseurl;
68
    }
69

    
70
    public void setLocalPort(int localPort) {
71
        this.localPort = localPort;
72
    }
73

    
74
    public void setRealm(String realm) {
75
        this.realm = realm;
76
    }
77

    
78
    @Override
79
    public OnlineUserIdentificationRequester createUserIdentificationRequester() {
80
        if( StringUtils.isBlank(realm) ) {
81
            return null;
82
        }
83
        if( StringUtils.isBlank(baseurl) ) {
84
            return null;
85
        }
86
        if( localPort<1024  ) {
87
            return null;
88
        }
89
        return new UserIdentificationKeycloak(this);
90
    }
91

    
92
    @Override
93
    public boolean hasIdentificationConfig() {
94
        return true;
95
    }
96

    
97
    @Override
98
    public boolean requestIdentificationConfig() {
99
        WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
100
        UserIdentificationKeycloakConfigPanel panel = new UserIdentificationKeycloakConfigPanel();
101
        panel.put(this);
102
        Dialog dialog = winmgr.createDialog(
103
                panel,
104
                "Configuracion de Keycloak",
105
                null, 
106
                WindowManager_v2.BUTTONS_OK_CANCEL
107
        );
108
        dialog.addActionListener((ActionEvent e) -> {
109
            if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
110
                panel.fetch(this);
111
            }
112
        });
113
        dialog.show(WindowManager.MODE.DIALOG);
114
        return dialog.getAction()==WindowManager_v2.BUTTON_OK;
115
    }
116

    
117
    @Override
118
    public void fromJson(JsonObject json) {
119
        super.fromJson(json);
120
        this.realm = json.getString("realm", null);
121
        this.baseurl = json.getString("baseurl", null);
122
        this.localPort = json.getInt("localPort", 0);                
123
    }
124

    
125
    @Override
126
    public JsonObjectBuilder toJsonBuilder() {
127
        JsonObjectBuilder builder = super.toJsonBuilder();
128
        builder.add("realm", this.realm);
129
        builder.add("baseurl", this.baseurl);
130
        builder.add("localPort", this.localPort);
131
        return null;
132
    }
133

    
134
    @Override
135
    public void saveToState(PersistentState state) throws PersistenceException {
136
        state.set("factory",this.factory.getName());
137
        state.set("urlOnline",this.urlOnline);
138
        state.set("baseurl",this.baseurl);
139
        state.set("realm",this.realm);
140
        state.set("localPort",this.localPort);
141
    }
142

    
143
    @Override
144
    public void loadFromState(PersistentState state) throws PersistenceException {
145
        String factoryName = state.getString("factory");
146
        this.factory = OnlineLocator.getOnlineManager().getUserIdentificationRequester(factoryName);
147
        this.urlOnline = state.getString("urlOnline");
148
        this.baseurl = state.getString("baseurl");
149
        this.realm = state.getString("realm");
150
        this.localPort = state.getInt("localPort");
151
    }
152
    
153
    public static void selfRegister() {
154
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
155
        if (manager.getDefinition(PERSISTENT_DEFINITION_NAME) == null) {
156
            DynStruct definition = manager.addDefinition(
157
                    UserIdentificationKeycloakConfig.class,
158
                    PERSISTENT_DEFINITION_NAME, 
159
                    "UserIdentificationKeycloakConfig persistence definition", null, null
160
            );            
161
            definition.addDynFieldString("factory");
162
            definition.addDynFieldString("urlOnline");
163
            definition.addDynFieldString("baseurl");
164
            definition.addDynFieldString("realm");
165
            definition.addDynFieldInt("localPort");
166
        }
167
    }
168

    
169
    @Override
170
    public String getLabel() {
171
        return String.format("%s - %s", this.baseurl, this.realm);
172
    }
173

    
174
    @Override
175
    public OnlineUserIdentificationRequesterConfig getValue() {
176
        return this;
177
    }
178

    
179
    @Override
180
    public String toString() {
181
        return String.format(
182
           "Factory: %s\ngvSIG online URL: %s\nKeycloak URL:%s\nRealm: %s\nLocal port:%d", 
183
           this.getFactory().getName(),
184
           this.getUrlOnline(),
185
           this.getBaseurl(),
186
           this.getRealm(),
187
           this.getLocalPort()
188
        );
189
    }
190
        
191
    
192
}