|
JDBCDSPersistence |
|
1 /* 2 * Copyright (c) 1998-2001, The University of Sheffield. 3 * 4 * This file is part of GATE (see http://gate.ac.uk/), and is free 5 * software, licenced under the GNU Library General Public License, 6 * Version 2, June 1991 (in the distribution as file licence.html, 7 * and also available at http://gate.ac.uk/gate/licence.html). 8 * 9 * Valentin Tablan 26/10/2001 10 * 11 * $Id: JDBCDSPersistence.java,v 1.3 2001/11/19 17:47:07 kalina Exp $ 12 * 13 */ 14 package gate.util.persistence; 15 16 import gate.*; 17 import gate.creole.*; 18 import gate.security.*; 19 import gate.util.*; 20 import gate.gui.OkCancelDialog; 21 import gate.persist.JDBCDataStore; 22 import gate.persist.PersistenceException; 23 24 import java.util.*; 25 26 import junit.framework.Assert; 27 import javax.swing.*; 28 /** 29 * Adds security data storage to the DS persistence 30 */ 31 public class JDBCDSPersistence extends DSPersistence { 32 33 /** 34 * Populates this Persistence with the data that needs to be stored from the 35 * original source object. 36 */ 37 public void extractDataFromSource(Object source)throws PersistenceException{ 38 //check input 39 if(! (source instanceof JDBCDataStore)){ 40 throw new UnsupportedOperationException( 41 getClass().getName() + " can only be used for " + 42 JDBCDataStore.class.getName() + 43 " objects!\n" + source.getClass().getName() + 44 " is not a " + JDBCDataStore.class.getName()); 45 } 46 47 super.extractDataFromSource(source); 48 49 JDBCDataStore ds = (JDBCDataStore)source; 50 Map securityData = Gate.getDataStoreRegister().getSecurityData(ds); 51 userName = ((User)securityData.get("user")).getName(); 52 userGroup = ((Group)securityData.get("group")).getName(); 53 } 54 55 56 /** 57 * Creates a new object from the data contained. This new object is supposed 58 * to be a copy for the original object used as source for data extraction. 59 */ 60 public Object createObject()throws PersistenceException, 61 ResourceInstantiationException{ 62 63 AccessController ac = null; 64 JDBCDataStore ds = null; 65 User usr = null; 66 Group grp = null; 67 68 DataStoreRegister reg = Gate.getDataStoreRegister(); 69 boolean securityOK = false; 70 Session mySession = null; 71 //1. login the user; 72 securityLoop: do{ 73 try{ 74 String userPass; 75 ac = new AccessControllerImpl(storageUrlString); 76 ac = Factory.createAccessController(storageUrlString); 77 Assert.assertNotNull(ac); 78 ac.open(); 79 80 try { 81 Box listBox = Box.createHorizontalBox(); 82 83 Box vBox = Box.createVerticalBox(); 84 vBox.add(new JLabel("User name: ")); 85 vBox.add(new JLabel("Password: ")); 86 vBox.add(new JLabel("Group: ")); 87 listBox.add(vBox); 88 listBox.add(Box.createHorizontalStrut(20)); 89 90 JPanel panel2 = new JPanel(); 91 panel2.setLayout(new BoxLayout(panel2,BoxLayout.Y_AXIS)); 92 vBox = Box.createVerticalBox(); 93 94 JTextField usrField = new JTextField(30); 95 usrField.setText(userName); 96 vBox.add(usrField); 97 JPasswordField pwdField = new JPasswordField(30); 98 vBox.add(pwdField); 99 JTextField grpField = new JTextField(30); 100 grpField.setText(userGroup); 101 vBox.add(grpField); 102 103 listBox.add(vBox); 104 105 if(OkCancelDialog.showDialog(null, listBox, 106 "Please re-enter login details")){ 107 userName = usrField.getText(); 108 userPass = new String(pwdField.getPassword()); 109 userGroup = grpField.getText(); 110 if (userName.equals("") || userPass.equals("") || userGroup.equals("")) { 111 JOptionPane.showMessageDialog( 112 null, 113 "You must provide non-empty user name, password and group!", 114 "Login error", 115 JOptionPane.ERROR_MESSAGE 116 ); 117 securityOK = false; 118 continue securityLoop; 119 } 120 }else{ 121 //user cancelled 122 try { 123 if (ac != null) 124 ac.close(); 125 if (ds != null) 126 ds.close(); 127 } catch (gate.persist.PersistenceException ex) { 128 JOptionPane.showMessageDialog(null, "Persistence error!\n " + 129 ex.toString(), 130 "Gate", JOptionPane.ERROR_MESSAGE); 131 } 132 throw new PersistenceException("User cancelled!"); 133 } 134 135 grp = ac.findGroup(userGroup); 136 usr = ac.findUser(userName); 137 mySession = ac.login(userName, userPass, grp.getID()); 138 } catch (gate.security.SecurityException ex) { 139 JOptionPane.showMessageDialog( 140 null, 141 "Authentication failed! Incorrect details entred.", 142 "Login error", 143 JOptionPane.ERROR_MESSAGE 144 ); 145 securityOK = false; 146 continue securityLoop; 147 } 148 149 if (! ac.isValidSession(mySession)){ 150 JOptionPane.showMessageDialog( 151 null, 152 "Incorrect session obtained. " 153 + "Probably there is a problem with the database!", 154 "Login error", 155 JOptionPane.ERROR_MESSAGE 156 ); 157 securityOK = false; 158 continue securityLoop; 159 } 160 }catch(gate.security.SecurityException se) { 161 JOptionPane.showMessageDialog(null, "User identification error!\n " + 162 se.toString(), 163 "Gate", JOptionPane.ERROR_MESSAGE); 164 securityOK = false; 165 continue securityLoop; 166 } 167 securityOK = true; 168 } while(!securityOK); 169 170 try { 171 172 //2. open the oracle datastore 173 ds = (JDBCDataStore)super.createObject(); 174 try { 175 ds.setSession(mySession); 176 } catch(gate.security.SecurityException ex1) { 177 throw new PersistenceException(ex1.getMessage()); 178 } 179 180 //3. add the security data for this datastore 181 //this saves the user and group information, so it can 182 //be used later when resources are created with certain rights 183 FeatureMap securityData = Factory.newFeatureMap(); 184 securityData.put("user", usr); 185 securityData.put("group", grp); 186 reg.addSecurityData(ds, securityData); 187 188 } catch(PersistenceException pe) { 189 JOptionPane.showMessageDialog(null, "Datastore open error!\n " + 190 pe.toString(), 191 "Gate", JOptionPane.ERROR_MESSAGE); 192 } 193 194 return ds; 195 } 196 197 protected String userName; 198 protected String userGroup; 199 }
|
JDBCDSPersistence |
|