Changeset 2738


Ignore:
Timestamp:
03/26/13 14:04:11 (11 years ago)
Author:
yana
Message:

fixed no-scroll-in-search-results panel bug;
added testing mode to test endpoints on development servers;
added fist functionality for the show-case: save TCF into Personal Workspace using sardine library;
added: in scan operation the resource handle is put in quotes to avoid parse error.

Location:
SRUAggregator/trunk
Files:
1 added
6 edited
1 copied

Legend:

Unmodified
Added
Removed
  • SRUAggregator/trunk/pom.xml

    r2694 r2738  
    6565            <version>1.17.1</version>
    6666        </dependency>
     67        <dependency>
     68            <groupId>com.googlecode.sardine</groupId>
     69            <artifactId>sardine</artifactId>
     70            <version>314</version>
     71            <type>jar</type>
     72        </dependency>
    6773    </dependencies>
    6874    <build>
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/Aggregator.java

    r2694 r2738  
    4646import eu.clarin.weblicht.wlfxb.xb.WLData;
    4747import javax.ws.rs.core.MediaType;
     48import org.zkoss.zul.Popup;
    4849
    4950/**
    5051 * Main window of the Aggregator application.
    51  * 
     52 *
    5253 * @author Yana Panchenko
    5354 */
     
    5556
    5657    private static final Logger logger = Logger.getLogger(Aggregator.class.getName());
    57    
    5858//    @Wire
    5959//    private Grid anzeigeGrid;
     
    8888    @Wire
    8989    private Label searchResultsProgress;
    90 
     90    @Wire
     91    private Popup wspaceSigninpop;
     92    @Wire
     93    private Textbox wspaceUserName;
     94    @Wire
     95    private Textbox wspaceUserPwd;
    9196    private WebResource mapGenerator;
    9297    public static final String MAPS_SERVICE_URL = "http://weblicht.sfs.uni-tuebingen.de/rws/service-geolocationconsumer/resources/geoloc/";
    93    
    9498    private Map<String, List<String>> xAggregationContext;
    9599    private SRUVersion version = SRUVersion.VERSION_1_2;
    96100    private SearchResultsController searchResultsController;
    97101    private CenterRegistry registry;
     102    private boolean testingMode = false;
    98103
    99104    @Override
    100105    public void doAfterCompose(Component comp) throws Exception {
    101        
     106
    102107        super.doAfterCompose(comp);
    103108
     
    105110
    106111        languageSelect.setSelectedItem(anyLanguage);
    107        
     112
    108113        searchResultsController = new SearchResultsController(resultsBox, searchResultsProgress);
    109114        // assign the search controller to desktop, so that it can be accessed to be shutdown when the desktop is destroyed
     
    112117        Set<SearchResultsController> activeControllers = (Set<SearchResultsController>) Executions.getCurrent().getDesktop().getWebApp().getAttribute(WebAppListener.ACTIVE_SEARCH_CONTROLLERS);
    113118        activeControllers.add(searchResultsController);
    114        
     119
    115120        registry = new CenterRegistry();
    116         registry.loadChildren();
     121        registry.loadChildren(testingMode);
    117122        CorpusTreeModel corporaModel = new CorpusTreeModel(registry);
    118123        tree.setModel(corporaModel);
    119124        tree.setItemRenderer(new CorpusTreeNodeRenderer());
    120125        tree.setMultiple(true);
    121        
    122        
     126
     127
    123128        //tempMap();
    124129
     
    127132    @Listen("onSelect = #languageSelect")
    128133    public void onSelectLanguage(Event ev) {
    129        //TODO
    130     }
    131    
    132    
     134        //TODO
     135    }
     136
    133137    @Listen(ZulEvents.ON_AFTER_RENDER + "=#tree")
    134138    public void onAfterRenderCorporaTree(Event ev) {
     
    157161        searchResultsController.executeSearch(tree.getSelectedItems(), maxRecords, searchString.getText(), version);
    158162    }
    159    
     163
    160164    @Listen("onOK = #searchString")
    161165    public void onEnterSearchString(Event ev) {
    162166        onExecuteSearch(ev);
    163167    }
    164  
     168
    165169    @Listen("onClick=#clearResults")
    166170    public void onClearResults(Event ev) {
     
    193197        searchResultsController.exportTCF();
    194198    }
     199
     200    @Listen("onClick=#exportResultsPWTCF")
     201    public void onExportResultsPWTCF(Event ev) {
     202        wspaceSigninpop.open(resultsBox, "top_center");
     203    }
     204
     205    @Listen("onClick=#wspaceSigninBtn")
     206    public void onSignInExportResultsPWTCF(Event ev) {
     207        String user = wspaceUserName.getValue();
     208        String pswd = wspaceUserPwd.getValue();
     209        if (user.isEmpty() || pswd.isEmpty()) {
     210            Messagebox.show("Need user name and password!");
     211        } else {
     212            wspaceUserPwd.setValue("");
     213            wspaceSigninpop.close();
     214            searchResultsController.exportPWTCF(user, pswd);
     215        }
     216    }
    195217   
     218    @Listen("onOK=#wspaceUserPwd")
     219    public void onSignInExportResultsPWTCFPwdOK(Event ev) {
     220        onSignInExportResultsPWTCF(ev);
     221    }
     222   
     223    @Listen("onClick=#wspaceCancelBtn")
     224    public void onSignInPWCancel(Event ev) {
     225        wspaceUserPwd.setValue("");
     226        wspaceSigninpop.close();
     227    }
     228
     229
    196230    @Listen("onClick=#addForeignEndpoint")
    197231    public void onAddForeignEndpoint(Event ev) {
    198             registry.addForeignPoint(foreignEndpointSelect.getValue().split(";")[1], foreignEndpointSelect.getValue().split(";")[0]);
     232        registry.addForeignPoint(foreignEndpointSelect.getValue().split(";")[1], foreignEndpointSelect.getValue().split(";")[0]);
    199233    }
    200234
    201235    private void processParameters() {
    202        
     236
    203237        String[] paramValue;
    204238        String contextJson = null;
     
    236270            paramsReceived[3] = contextJson;
    237271        }
    238         logger.log(Level.INFO, "Received parameters: query[{0}], operation[{1}], version[{2}], x-aggregation-context[{3}], ",  paramsReceived);
    239        
    240        
     272        logger.log(Level.INFO, "Received parameters: query[{0}], operation[{1}], version[{2}], x-aggregation-context[{3}], ", paramsReceived);
     273
     274        paramValue = Executions.getCurrent().getParameterMap().get("mode");
     275        if (paramValue != null) {
     276            String mode = paramValue[0].trim();
     277            if (mode.equals("testing")) {
     278                testingMode = true;
     279            }
     280        }
    241281
    242282        if (contextJson != null) {
     
    245285            }.getType();
    246286            try {
    247             this.xAggregationContext = gson.fromJson(contextJson, mapType);
     287                this.xAggregationContext = gson.fromJson(contextJson, mapType);
    248288            } catch (Exception ex) {
    249289                logger.log(Level.SEVERE, "Error parsing JSON from x-aggregation-context: {0} {1}", new String[]{ex.getMessage(), contextJson});
     
    260300        TextCorpusStored tc = new TextCorpusStored("en");
    261301        Token t1 = tc.createTokensLayer().addToken("Virginia");
    262         List<Token> s1 = new ArrayList<Token>(); s1.add(t1);
     302        List<Token> s1 = new ArrayList<Token>();
     303        s1.add(t1);
    263304        tc.createSentencesLayer().addSentence(s1);
    264305        tc.createGeoLayer("unknown", GeoLongLatFormat.DegDec);
    265306        //tc.getGeoLayer().addPoint("138.56027", "-34.6663", 15.0, null, null, null, t1);
    266307        WLData data = new WLData(tc);
    267        
     308
    268309        Iframe resultsPic = (Iframe) resultsBox.getFellow("resultsPic");
    269        
     310
    270311        try {
    271                     String output = mapGenerator.path("3").accept(MediaType.TEXT_HTML).type("text/tcf+xml").post(String.class, data);
    272                     Media media = new AMedia("map-" + 4 + ".html", null, "text/html", output);
    273                     resultsPic.setContent(media);
    274                 } catch (Exception e) {
    275                     Logger.getLogger(Aggregator.class.getName()).log(Level.SEVERE, "ERROR accessing the maps generator service", e);
    276                     Messagebox.show("ERROR accessing the maps generator service \n" + e.getMessage(), "FCS", 0, Messagebox.INFORMATION);
    277                 }
     312            String output = mapGenerator.path("3").accept(MediaType.TEXT_HTML).type("text/tcf+xml").post(String.class, data);
     313            Media media = new AMedia("map-" + 4 + ".html", null, "text/html", output);
     314            resultsPic.setContent(media);
     315        } catch (Exception e) {
     316            Logger.getLogger(Aggregator.class.getName()).log(Level.SEVERE, "ERROR accessing the maps generator service", e);
     317            Messagebox.show("ERROR accessing the maps generator service \n" + e.getMessage(), "FCS", 0, Messagebox.INFORMATION);
     318        }
    278319    }
    279320}
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/data/CenterRegistry.java

    r2527 r2738  
    33 * and open the template in the editor.
    44 */
    5 
    65package eu.clarin.sru.fcs.aggregator.data;
    76
     
    2524/**
    2625 * Center registry node. Its children are centers (institutions).
    27  * 
     26 *
    2827 * @author Yana Panchenko
    2928 */
    3029public class CenterRegistry implements CorpusTreeNode {
    31    
     30
    3231    private static final Logger logger = Logger.getLogger(CenterRegistry.class.getName());
    33 
    3432    private static final String crStartpoint = "http://130.183.206.32/restxml/";
    35 
    3633    //https://centerregistry-clarin.esc.rzg.mpg.de/restxml/
    37    
    3834    private boolean hasChildrenLoaded = false;
    39     private List<Institution> centers = new ArrayList<Institution>(); 
     35    private List<Institution> centers = new ArrayList<Institution>();
    4036
    4137    @Override
     
    4642    @Override
    4743    public void loadChildren() {
    48         //TODO change to use Alex binding for that...
     44        loadChildren(false);
     45    }
     46
     47    public void loadChildren(boolean testingMode) {
     48       
    4949        if (hasChildrenLoaded) {
    5050            return;
    5151        }
    5252        hasChildrenLoaded = true;
     53
     54        if (testingMode) {
     55            loadInstitutionForTesting();
     56        } else {
     57            loadInstitutionsFromCR();
     58        }
     59
     60        logger.log(Level.FINE, "Number of Centers: {0}", centers.size());
     61
     62    }
     63
     64    @Override
     65    public List<? extends CorpusTreeNode> getChildren() {
     66        loadChildren();
     67        return centers;
     68    }
     69
     70    @Override
     71    public CorpusTreeNode getChild(int index) {
     72        loadChildren();
     73        if (index >= centers.size()) {
     74            return null;
     75        }
     76        return centers.get(index);
     77    }
     78
     79    public void addForeignPoint(String endpointUrl, String institutionLink) {
     80        //TODO: ask what functionality is required here??
     81//        boolean added = false;
     82//        for (Institution center : this.centers) {
     83//            if (center.getLink().equals(institutionLink)) {
     84//                EndpointY ep = new EndpointY(endpointUrl, center);
     85//                center.loadChildren();
     86//                //center.loadChildren();
     87//                //ep.loadChildren();
     88//            }
     89//        }
     90//        if (!added) {
     91//            Institution institution = new Institution("unknown", institutionLink);
     92//            this.centers.add(institution);
     93//            //EndpointY ep = new EndpointY(endpointUrl, institution);
     94//            //this.loadChildren();
     95//            //institution.loadChildren();
     96//        }
     97    }
     98
     99    public static NodeList evaluateXPath(String statement, org.w3c.dom.Document domtree) {
     100        NodeList result = null;
     101
     102        XPath xpath = XPathFactory.newInstance().newXPath();
     103        try {
     104            result = (NodeList) xpath.evaluate(statement, domtree, XPathConstants.NODESET);
     105        } catch (XPathExpressionException ex) {
     106            logger.log(Level.SEVERE, "Error parsing XML: ", statement);
     107        }
     108        return result;
     109    }
     110
     111    //TODO change to use Alex binding for that...
     112    private void loadInstitutionsFromCR() {
    53113        InputStream is = null;
    54114        URL u;
     
    63123
    64124            //HttpsURLConnection urlConn = (HttpsURLConnection) u.openConnection();
    65            
    66             urlConn.setConnectTimeout(5000);                                   
     125
     126            urlConn.setConnectTimeout(5000);
    67127            urlConn.setReadTimeout(15000);
    68128            urlConn.setAllowUserInteraction(false);
    69                                    
     129
    70130            is = urlConn.getInputStream();
    71131
     
    76136            org.w3c.dom.Document document = builder.parse(is);
    77137
    78            
     138
    79139            instituteNames = evaluateXPath("//Centername", document);
    80140            institutionsUrls = evaluateXPath("//Center_id_link", document);
     
    101161            }
    102162        }
    103         logger.log(Level.FINE, "Number of Centers: {0}", centers.size());
    104 
    105163    }
    106164
    107     @Override
    108     public List<? extends CorpusTreeNode> getChildren() {
    109         loadChildren();
    110         return centers;
     165    private void loadInstitutionForTesting() {
     166        String institutionUrl = "http://www.example.org";
     167        String institutionName = "Institution for Testing";
     168        Institution institution = new InstitutionForTesting(institutionName, institutionUrl);
     169        if (!institution.getChildren().isEmpty()) {
     170            centers.add(institution);
     171        }
    111172    }
    112 
    113     @Override
    114     public CorpusTreeNode getChild(int index) {
    115         loadChildren();
    116         if (index >= centers.size()) {
    117             return null;
    118         }
    119         return centers.get(index);
    120     }
    121    
    122    
    123     public void addForeignPoint(String endpointUrl, String institutionLink) {
    124        
    125         //TODO: ask what functionality is required here??
    126        
    127 //        boolean added = false;
    128 //        for (Institution center : this.centers) {
    129 //            if (center.getLink().equals(institutionLink)) {
    130 //                EndpointY ep = new EndpointY(endpointUrl, center);
    131 //                center.loadChildren();
    132 //                //center.loadChildren();
    133 //                //ep.loadChildren();
    134 //            }
    135 //        }
    136 //        if (!added) {
    137 //            Institution institution = new Institution("unknown", institutionLink);
    138 //            this.centers.add(institution);
    139 //            //EndpointY ep = new EndpointY(endpointUrl, institution);
    140 //            //this.loadChildren();
    141 //            //institution.loadChildren();
    142 //        }
    143     }
    144    
    145    
    146     public static NodeList evaluateXPath(String statement, org.w3c.dom.Document domtree) {
    147         NodeList result = null;
    148 
    149         XPath xpath = XPathFactory.newInstance().newXPath();
    150         try {
    151             result = (NodeList) xpath.evaluate(statement, domtree, XPathConstants.NODESET);
    152         } catch (XPathExpressionException ex) {
    153             System.out.println(ex.getMessage());
    154         }
    155         return result;
    156     }
    157 
    158173}
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/data/Corpus.java

    r2599 r2738  
    127127        StringBuilder scanClause = new StringBuilder("fcs.resource");
    128128        scanClause.append("=");
     129        scanClause.append("");
    129130        scanClause.append(value);
     131        scanClause.append("");
    130132        try {
    131133            SRUClient sruClient = new SRUClient(SRUVersion.VERSION_1_2);
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/data/InstitutionForTesting.java

    r2599 r2738  
    1919 * @author Yana Panchenko
    2020 */
    21 public class Institution implements CorpusTreeNode {
     21public class InstitutionForTesting extends Institution {
    2222
    23     private String name;
    24     private String link;
    25     private ArrayList<Endpoint> endpoints;
     23    private List<Endpoint> endpoints = new ArrayList<Endpoint>();
    2624    private boolean hasChildrenLoaded = false;
     25   
     26    private static final String[] testEndpoints = new String[]{"http://lux17.mpi.nl/cqltest"};
    2727   
    2828    private static final Logger logger = Logger.getLogger(Institution.class.getName());
    2929
    30     public Institution(String name, String link) {
    31         this.name = name;
    32         this.link = link;
    33         this.endpoints = new ArrayList<Endpoint>();
     30    public InstitutionForTesting(String name, String link) {
     31        super(name,link);
    3432    }
    3533
    36     public String getName() {
    37         return name;
    38     }
    3934   
    40     public String getLink() {
    41         return link;
    42     }
    4335
    4436    @Override
     
    5446        }
    5547        hasChildrenLoaded = true;
    56         InputStream is = null;
    5748       
    58         try {
    59             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    60             DocumentBuilder builder = factory.newDocumentBuilder();
    61             URL u = new URL(link);
    62             is = u.openStream();
    63             Document doc = builder.parse(is);
    64             is.close();
    65             NodeList endpointsUrls = CenterRegistry
    66                     .evaluateXPath("//WebReference[./Description[text()=\"CQL\"]]/Website", doc);
    67 
    68             for (int j = 0; j < endpointsUrls.getLength(); j++) {
    69                 String epUrl = endpointsUrls.item(j).getTextContent();
     49        for (int j = 0; j < testEndpoints.length; j++) {
     50                String epUrl = testEndpoints[j];
    7051                Endpoint endpoint = new Endpoint(epUrl, this);
    7152                endpoints.add(endpoint);
    72             }
    73         } catch (Exception ex) {
    74             logger.log(Level.SEVERE, "Error accessing endpoint of {0} {1} {2}",
    75                     new String[]{link, ex.getClass().getName(), ex.getMessage()});
    76         } finally {
    77             if (is != null) {
    78                 try {
    79                     is.close();
    80                 } catch (IOException ex) {
    81                     logger.log(Level.SEVERE, null, ex);
    82                 }
    83             }
    84         }
     53        }
     54       
    8555    }
    8656
     
    10070    }
    10171   
    102     @Override
    103     public String toString() {
    104         if (name != null && name.length() > 0) {
    105             return name;
    106         } else {
    107         return link;
    108        }
    109     }
     72
    11073}
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/sresult/SearchResultsController.java

    r2606 r2738  
    11package eu.clarin.sru.fcs.aggregator.sresult;
    22
     3import com.googlecode.sardine.Sardine;
     4import com.googlecode.sardine.SardineFactory;
    35import eu.clarin.sru.client.SRUClientException;
    46import eu.clarin.sru.client.SRURecord;
     
    1921import eu.clarin.weblicht.wlfxb.tc.xb.TextCorpusStored;
    2022import eu.clarin.weblicht.wlfxb.xb.WLData;
     23import java.io.ByteArrayInputStream;
    2124import java.io.ByteArrayOutputStream;
     25import java.io.IOException;
     26import java.io.InputStream;
     27import java.text.DateFormat;
     28import java.text.SimpleDateFormat;
    2229import java.util.ArrayList;
     30import java.util.Date;
    2331import java.util.List;
     32import java.util.Random;
    2433import java.util.Set;
    2534import java.util.concurrent.Future;
     
    5867    private Label progress;
    5968   
     69   
     70    private static final String WSPACE_SERVER_URL = "http://egi-cloud21.zam.kfa-juelich.de";
     71    private static final String WSPACE_WEBDAV_DIR = "/owncloud/remote.php/webdav/";
     72    private static final String AGGREGATOR_DIR = "aggregator_results/";
     73   
    6074    private static final Logger logger = Logger.getLogger(SearchResultsController.class.getName());
    6175
     
    171185        resultsThread = new UpdateResultsThread();
    172186        resultsThread.start();
     187    }
     188
     189    private String kwcToText() {
     190        StringBuilder text = new StringBuilder();
     191
     192        if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     193            for (SearchResult result : resultsProcessed) {
     194                for (DataViewKWIC kwic : result.getDataKWIC()) {
     195                    text.append(kwic.getLeft());
     196                    text.append(" ");
     197                    text.append(kwic.getKeyword());
     198                    text.append(" ");
     199                    text.append(kwic.getRight());
     200                    text.append("\n");
     201                }
     202            }
     203
     204        }
     205        return text.toString();
    173206    }
    174207
     
    387420        }
    388421    }
     422   
     423   
     424   
     425    public void exportPWTCF(String user, String pass) {
     426        String text = kwcToText();
     427
     428        if (text.isEmpty()) {
     429            Messagebox.show("Nothing to export!");
     430        } else {
     431            WLData data;
     432            MetaData md = new MetaData();
     433            //data.metaData.source = "Tuebingen Uni";
     434            //md.addMetaDataItem("title", "binding test");
     435            //md.addMetaDataItem("author", "Yana");
     436            TextCorpusStored tc = new TextCorpusStored("unknown");
     437            tc.createTextLayer().addText(text.toString());
     438            data = new WLData(md, tc);
     439            ByteArrayOutputStream os = new ByteArrayOutputStream();
     440            try {
     441                WLDObjector.write(data, os);
     442                //Filedownload.save(os.toByteArray(), "text/tcf+xml", "ClarinDFederatedContentSearch.xml");
     443                Sardine sardine = SardineFactory.begin();
     444                sardine.setCredentials(user, pass);
     445                String outputDir = WSPACE_SERVER_URL + WSPACE_WEBDAV_DIR + AGGREGATOR_DIR;
     446                if (!sardine.exists(outputDir)) {
     447                    sardine.createDirectory(outputDir);
     448                }
     449                Date currentDate = new Date();
     450                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
     451                Random generator = new Random();
     452                int rn1 = generator.nextInt(1000000000);
     453                String createdFilePath = outputDir + format.format(currentDate) + "-" + rn1 + ".tcf";
     454                while (sardine.exists(createdFilePath)) {
     455                    rn1 = generator.nextInt(1000000000);
     456                    createdFilePath = outputDir + format.format(currentDate) + "-" + rn1 + ".tcf";
     457                }
     458                sardine.put(createdFilePath, os.toByteArray(), "text/tcf+xml");
     459                Messagebox.show("Export complete!\nCreated file:\n" + createdFilePath);
     460               
     461            } catch (IOException ex) {
     462                Logger.getLogger(SearchResultsController.class.getName()).log(Level.SEVERE, "Error accessing " + WSPACE_SERVER_URL + WSPACE_WEBDAV_DIR, ex);
     463            } catch (WLFormatException ex) {
     464                logger.log(Level.SEVERE, "Error exporting TCF {0} {1}", new String[]{ex.getClass().getName(), ex.getMessage()});
     465                Messagebox.show("Sorry, export error!");
     466            }
     467        }
     468    }
    389469
    390470    public void shutdown() {
  • SRUAggregator/trunk/src/main/webapp/index.zul

    r2694 r2738  
    151151                                    <menuitem label="Export Results to TCF" id="exportResultsTCF"
    152152                                        image="buttonExport.png"/>
     153                                    <menuitem label="Export Results as TCF to personal workspace" id="exportResultsPWTCF"
     154                                        image="buttonExport.png"/>
    153155                                </menupopup>
    154156                            </menu>
     
    162164                        </menubar>
    163165                    </north>
    164                     <center  margins="0,5,0,0" autoscroll="true" border="0">
    165                         <panel width="100%" height="100%">
    166                             <panelchildren id="resultsPanel" style="overflow: auto">
    167                                 <window id="resultsBox" style="overflow:auto;" width="100%" height="100%">
    168                                     <iframe id="resultsPic" src="help.html" width="100%" height="100%"/>
     166                    <center  margins="0,5,0,0" autoscroll="true" border="0" >
     167                        <panel>
     168                            <panelchildren id="resultsPanel"  >
     169                                <window id="resultsBox" style="overflow:auto;">
     170                                    <iframe id="resultsPic" src="help.html" width="80%" height="80%"/>
    169171                                </window>
    170172                                <label value=" " id="searchResultsProgress" style="border-width:0px;margin-left:5px;"/>
     
    181183           
    182184        </borderlayout>
     185
     186
     187
     188<popup id="wspaceSigninpop" width="400px">
     189<label value="Personal Workspace Sign In" style="font-weight:bold;color:#0e4071;"/>
     190<grid>
     191
     192<rows>
     193<row>
     194<label style="font-weight:bold" value="Username:"/>
     195<textbox id="wspaceUserName"  width="150px" value=""/>
     196</row>
     197<row>
     198<label style="font-weight:bold" value="Password:"/>
     199<textbox id="wspaceUserPwd" type="password" width="150px" value=""/>
     200</row>
     201
     202<!--
     203<row spans="2">
     204<div align="center">
     205<button id="wspaceSigninBtn" label="Sign in" image="key.png" sclass="ccsDarkBlue" />
     206<button id="wspaceCancelBtn" label="Cancel" image="buttonDelete.png" sclass="ccsDarkBlue" style="margin-left:10px;"/>
     207</div>
     208</row>
     209-->
     210<row>
     211<div>
     212</div>
     213<div align="center">
     214<button id="wspaceSigninBtn" label="Sign in" image="key.png" sclass="ccsDarkBlue" />
     215<button id="wspaceCancelBtn" label="Cancel" image="buttonDelete.png" sclass="ccsDarkBlue" style="margin-left:10px;"/>
     216</div>
     217</row>
     218
     219</rows>
     220</grid>
     221</popup>
    183222       
    184223    </window>
Note: See TracChangeset for help on using the changeset viewer.