Changeset 4069 for SRUAggregator


Ignore:
Timestamp:
11/21/13 13:17:06 (11 years ago)
Author:
yana
Message:

added: plain-text export of search results; excel export of search results; in TCF iexport TCF s tokenized and matched layer added with source corpus information - only for German language corpora.

Location:
SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/Aggregator.java

    r3044 r4069  
    128128        searchResultsComposer.exportTCF();
    129129    }
     130   
     131    @Listen("onClick=#downloadText")
     132    public void onExportResultsText(Event ev) {
     133        searchResultsComposer.exportText();
     134    }
     135   
     136    @Listen("onClick=#downloadExcel")
     137    public void onExportResultsExcel(Event ev) {
     138        searchResultsComposer.exportExcel();
     139    }
    130140
    131141    @Listen("onClick=#exportPWCSV")
     
    138148    public void onExportResultsPWTCF(Event ev) {
    139149        exportDataType = 0;
     150        wspaceSigninpop.open(srDiv, "top_center");
     151    }
     152   
     153    @Listen("onClick=#exportPWText")
     154    public void onExportResultsPWText(Event ev) {
     155        exportDataType = 2;
     156        wspaceSigninpop.open(srDiv, "top_center");
     157    }
     158   
     159    @Listen("onClick=#exportPWExcel")
     160    public void onExportResultsPWExcel(Event ev) {
     161        exportDataType = 3;
    140162        wspaceSigninpop.open(srDiv, "top_center");
    141163    }
     
    152174            if (exportDataType == 0) {
    153175                searchResultsComposer.exportPWTCF(user, pswd);
    154             } else {
     176            } else if (exportDataType == 1) {
    155177                searchResultsComposer.exportPWCSV(user, pswd);
     178            } else if (exportDataType == 2) {
     179                searchResultsComposer.exportPWText(user, pswd);
     180            } else if (exportDataType == 3) {
     181                searchResultsComposer.exportPWExcel(user, pswd);
    156182            }
    157183        }
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/CacheCorporaScanIntoFileTask.java

    r3062 r4069  
    1111import eu.clarin.sru.fcs.aggregator.sopt.Corpus;
    1212import static eu.clarin.sru.fcs.aggregator.sopt.Corpus.ROOT_HANDLE;
    13 import eu.clarin.sru.fcs.aggregator.sopt.CorpusCache;
    14 import eu.clarin.sru.fcs.aggregator.sopt.CorpusModelLive;
    1513import eu.clarin.sru.fcs.aggregator.sopt.Endpoint;
    1614import eu.clarin.sru.fcs.aggregator.sopt.InstitutionI;
    17 import eu.clarin.sru.fcs.aggregator.sopt.Languages;
    1815import eu.clarin.sru.fcs.aggregator.util.SRUCQLscan;
    1916import java.io.BufferedOutputStream;
     
    2219import java.io.FileOutputStream;
    2320import java.io.IOException;
    24 import java.io.OutputStream;
    25 import java.util.ArrayList;
    26 import java.util.HashMap;
    27 import java.util.HashSet;
    2821import java.util.List;
    29 import java.util.Map;
    30 import java.util.Set;
    3122import java.util.TimerTask;
    32 import java.util.concurrent.ConcurrentHashMap;
    3323import java.util.concurrent.ExecutionException;
    3424import java.util.concurrent.Future;
     
    3727import java.util.logging.Level;
    3828import java.util.logging.Logger;
    39 import org.joda.time.LocalDate;
    4029import org.joda.time.LocalTime;
    4130import org.w3c.dom.DocumentFragment;
     
    4332import org.w3c.dom.Node;
    4433import org.w3c.dom.NodeList;
    45 import org.zkoss.zk.ui.Executions;
    46 import org.zkoss.zul.DefaultTreeNode;
    4734
    4835/**
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/SearchOptions.java

    r3059 r4069  
    2323import java.lang.reflect.Type;
    2424import java.util.ArrayList;
     25import java.util.Collection;
    2526import java.util.Collections;
    2627import java.util.HashSet;
     
    143144        Treechildren openTreeItems = tree.getTreechildren();
    144145        for (Treeitem openItem : openTreeItems.getItems()) {
     146           
     147            DefaultTreeNode<Corpus> node = (DefaultTreeNode<Corpus>) openItem.getValue();
     148            Corpus data = node.getData();
     149            System.out.println(data);
     150           
    145151            corpusRenderer.updateItem(openItem, false);
    146152        }
     
    150156        onDeselectAll(null);
    151157        Treechildren openTreeItems = tree.getTreechildren();
    152         for (Treeitem openItem : openTreeItems.getItems()) {
     158       
     159        List<Treeitem> openitems = new ArrayList<Treeitem>();
     160        openitems.addAll(openTreeItems.getItems());
     161           
     162        for (Treeitem openItem : openitems) {
    153163            DefaultTreeNode<Corpus> node = (DefaultTreeNode<Corpus>) openItem.getValue();
    154164            Corpus data = node.getData();
     
    172182                        }
    173183                    }
     184                   
     185//                    // this is a temporary solution,
     186//                    // the whole concept on how selected externally resources
     187//                    // are displayed has to be changed, otherwise endpoints with
     188//                    // hundreds of subresources will break the tree interface
     189//                    // by loading all their resources...
     190//                    List<String> handlesCopy = new ArrayList<String>(handles.size());
     191//                    handlesCopy.addAll(handles);
     192//                    selectCorpora(openItem, data, handlesCopy);
    174193                }
    175194            }
     
    300319    }
    301320
     321    private void selectCorpora(Treeitem openItem, Corpus data, List<String> handles) {
     322        List<String> handlesFound = new ArrayList<String>();
     323        for (String handle : handles) {
     324            if (handle.equals(data.getHandle())) {
     325                handlesFound.add(handle);
     326            }
     327        }
     328        for (String handle : handlesFound) {
     329            corpusRenderer.updateItem(openItem, true);
     330            handles.remove(handle);
     331        }
     332       
     333        if (!handles.isEmpty()) {
     334            int sizeBefore = handles.size();
     335            openItem.setOpen(true);
     336            Treechildren tchildren = openItem.getTreechildren();
     337            List<Treeitem> tcitems = new ArrayList<Treeitem>();
     338            tcitems.addAll(tchildren.getItems());
     339            for (Treeitem child : tcitems) {
     340                DefaultTreeNode<Corpus> node = (DefaultTreeNode<Corpus>) child.getValue();
     341                Corpus cdata = node.getData();
     342                selectCorpora(child, cdata, handles);
     343                if (handles.isEmpty()) {
     344                    break;
     345                }
     346            }
     347            if (sizeBefore == handles.size()) {
     348                openItem.setOpen(false);
     349            }
     350        }
     351    }
     352
    302353}
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/SearchResults.java

    r3062 r4069  
    3333import eu.clarin.weblicht.wlfxb.io.WLFormatException;
    3434import eu.clarin.weblicht.wlfxb.md.xb.MetaData;
     35import eu.clarin.weblicht.wlfxb.tc.api.MatchedCorpus;
     36import eu.clarin.weblicht.wlfxb.tc.api.Token;
    3537import eu.clarin.weblicht.wlfxb.tc.xb.TextCorpusStored;
    3638import eu.clarin.weblicht.wlfxb.xb.WLData;
    3739import java.io.ByteArrayOutputStream;
    3840import java.io.IOException;
     41import java.io.UnsupportedEncodingException;
    3942import java.text.SimpleDateFormat;
    4043import java.util.Date;
     
    4548import java.util.concurrent.Future;
    4649import java.util.concurrent.atomic.AtomicBoolean;
     50import opennlp.tools.tokenize.TokenizerME;
     51import opennlp.tools.tokenize.TokenizerModel;
     52import org.apache.poi.ss.usermodel.Cell;
     53import org.apache.poi.ss.usermodel.CellStyle;
     54import org.apache.poi.ss.usermodel.Font;
     55import org.apache.poi.ss.usermodel.Row;
     56import org.apache.poi.ss.usermodel.Sheet;
     57import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    4758import org.zkoss.zhtml.Filedownload;
    4859import org.zkoss.zk.ui.event.EventListener;
     
    8697    private Languages languages;
    8798
     99
    88100    @Override
    89101    public void doAfterCompose(Component comp) throws Exception {
     
    155167
    156168    private SearchResult executeSearch(Corpus corpus, String searchString) {
    157         SearchResult resultsItem = new SearchResult(corpus);
     169        SearchResult resultsItem = new SearchResult(corpus, searchString);
    158170        LOGGER.log(Level.INFO, "Executing search for {0} query={1} maxRecords={2}",
    159171                new Object[]{corpus.toString(), searchString, maxRecords});
     
    366378   
    367379    public void exportTCF() {
    368             byte[] bytes = getExportTCF();
     380            byte[] bytes = getExportTokenizedTCF();
    369381            if (bytes != null) {
    370382                Filedownload.save(bytes, "text/tcf+xml", "ClarinDFederatedContentSearch.xml");
     
    372384    }
    373385   
     386    public void exportText() {
     387            String text = getExportText().toString();
     388            if (text != null) {
     389                Filedownload.save(text, "text/plain", "ClarinDFederatedContentSearch.txt");
     390        }
     391    }
     392   
     393   
     394    void exportExcel() {
     395       
     396        byte[] bytes = getExportExcel();
     397            if (bytes != null) {
     398                Filedownload.save(bytes, "text/tcf+xml", "ClarinDFederatedContentSearch.xls");
     399        }
     400    }
     401
     402    private byte[] getExportExcel() {
     403       
     404        boolean noResult = true;
     405        SXSSFWorkbook workbook = null;
     406        ByteArrayOutputStream excelStream = new ByteArrayOutputStream();
     407        if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     408            try {
     409                String[] headers = new String[] {
     410                    "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
     411           
     412                workbook = new SXSSFWorkbook();
     413                Sheet sheet = workbook.createSheet();
     414
     415                Font boldFont = workbook.createFont();
     416                boldFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
     417
     418                // Header
     419                CellStyle headerStyle = workbook.createCellStyle();
     420                headerStyle.setFont(boldFont);
     421
     422                Row row = sheet.createRow(0);
     423
     424                for (int j = 0; j < headers.length; ++j) {
     425                    Cell cell = row.createCell(j, Cell.CELL_TYPE_STRING);
     426                    cell.setCellValue(headers[j]);
     427                    cell.setCellStyle(headerStyle);
     428                }
     429
     430                // Body
     431                Cell cell;
     432                for (int k = 0; k < resultsProcessed.size(); k++) {
     433                    SearchResult result = resultsProcessed.get(k);
     434                    List<Kwic> kwics = result.getKwics();
     435                    for (int i = 0; i < kwics.size(); i++) {
     436                        Kwic kwic = kwics.get(i);
     437                        row = sheet.createRow(k + i + 1);
     438                        cell = row.createCell(0, Cell.CELL_TYPE_STRING);
     439                        cell.setCellValue(kwic.getLeft());
     440                        cell = row.createCell(1, Cell.CELL_TYPE_STRING);
     441                        cell.setCellValue(kwic.getKeyword());
     442                        cell = row.createCell(2, Cell.CELL_TYPE_STRING);
     443                        cell.setCellValue(kwic.getRight());
     444                        if (kwic.getPid() != null) {
     445                            cell = row.createCell(3, Cell.CELL_TYPE_STRING);
     446                            cell.setCellValue(kwic.getPid());
     447                        }
     448                        if (kwic.getReference() != null) {
     449                            cell = row.createCell(3, Cell.CELL_TYPE_STRING);
     450                            cell.setCellValue(kwic.getReference());
     451                        }
     452                        noResult = false;
     453                    }
     454                }
     455                workbook.write(excelStream);
     456            } catch (IOException ex) {
     457                // should not happen
     458                Logger.getLogger(SearchResults.class.getName()).log(Level.SEVERE, null, ex);
     459            } finally {
     460                if (workbook != null) {
     461                    workbook.dispose();
     462                }
     463            }
     464        }
     465        if (noResult) {
     466            Messagebox.show("Nothing to export!");
     467            return null;
     468        } else {
     469            return excelStream.toByteArray();
     470        }
     471       
     472    }
     473
     474    void exportPWText(String user, String pass) {
     475        byte[] bytes = null;
     476        try {
     477            bytes = getExportText().toString().getBytes("UTF-8");
     478        } catch (UnsupportedEncodingException ex) {
     479            Logger.getLogger(SearchResults.class.getName()).log(Level.SEVERE, null, ex);
     480        }
     481        if (bytes != null) {
     482            uploadToPW(user, pass, bytes, "text/plan",".txt");
     483        }
     484    }
     485
     486    void exportPWExcel(String user, String pass) {
     487        byte[] bytes = getExportExcel();
     488            if (bytes != null) {
     489                uploadToPW(user, pass, bytes, "application/vnd.ms-excel",".xls");
     490        }
     491    }
     492   
    374493   public void exportPWTCF(String user, String pass) {
    375494       
    376        byte[] bytes = getExportTCF();
     495       byte[] bytes = getExportTokenizedTCF();
    377496            if (bytes != null) {
    378497                uploadToPW(user, pass, bytes, "text/tcf+xml",".tcf");
     
    436555    }
    437556   
     557   
     558        private byte[] getExportTokenizedTCF() {
     559        StringBuilder text = new StringBuilder();
     560        Set<String> resultsLangs = new HashSet<String>();
     561        if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     562            for (SearchResult result : resultsProcessed) {
     563                resultsLangs.addAll(result.getCorpus().getLanguages());
     564                for (Kwic kwic : result.getKwics()) {
     565                    text.append(kwic.getLeft());
     566                    text.append(" ");
     567                    text.append(kwic.getKeyword());
     568                    text.append(" ");
     569                    text.append(kwic.getRight());
     570                    text.append("\n");
     571                }
     572            }
     573
     574        }
     575        ByteArrayOutputStream os = null;
     576        if (text.length() == 0) {
     577            Messagebox.show("Nothing to export!");
     578        } else {
     579            WLData data;
     580            MetaData md = new MetaData();
     581            String resultsLang = "unknown";
     582            if (resultsLangs.size() == 1) {
     583                resultsLang = resultsLangs.iterator().next();
     584                String code2 = languages.code2ForCode(resultsLang);
     585                if (code2 != null) {
     586                    resultsLang = code2;
     587                }
     588            } else if (!searchLanguage.equals("anylang")) {
     589                String code2 = languages.code2ForCode(searchLanguage);
     590                if (code2 == null) {
     591                    resultsLang = searchLanguage;
     592                } else {
     593                    resultsLang = code2;
     594                }
     595            }
     596            TextCorpusStored tc = new TextCorpusStored(resultsLang);
     597            tc.createTextLayer().addText(text.toString());
     598            addTokensSentencesMatches(tc);
     599            data = new WLData(md, tc);
     600            os = new ByteArrayOutputStream();
     601            try {
     602                WLDObjector.write(data, os);
     603            } catch (WLFormatException ex) {
     604                LOGGER.log(Level.SEVERE, "Error exporting TCF {0} {1}", new String[]{ex.getClass().getName(), ex.getMessage()});
     605                Messagebox.show("Sorry, export error!");
     606            }
     607        }
     608        if (os == null) {
     609            return null;
     610        } else {
     611            return os.toByteArray();
     612        }
     613    }
     614   
     615       
     616    private void addTokensSentencesMatches(TextCorpusStored tc) {
     617       
     618        TokenizerModel model = (TokenizerModel) Executions.getCurrent().getDesktop().getWebApp().getAttribute(WebAppListener.DE_TOK_MODEL);
     619       
     620        if (model == null || !tc.getLanguage().equals("de")) {
     621            return;
     622        }
     623        TokenizerME tokenizer = new TokenizerME(model);
     624       
     625        if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     626            tc.createTokensLayer();
     627            tc.createSentencesLayer();
     628            tc.createMatchesLayer("FCS", resultsProcessed.get(0).getSearchString());
     629            for (SearchResult result : resultsProcessed) {
     630                MatchedCorpus mCorpus = tc.getMatchesLayer().addCorpus(result.getCorpus().getDisplayName(), result.getCorpus().getHandle());
     631                for (Kwic kwic : result.getKwics()) {
     632                    List<Token> tokens = new ArrayList<Token>();
     633                    addToTcfTokens(tokens, tc, tokenizer.tokenize(kwic.getLeft()));
     634                    String[] target = tokenizer.tokenize(kwic.getKeyword());
     635                    List<Token> targetTokens = addToTcfTokens(tokens, tc, target);
     636                    addToTcfTokens(tokens, tc, tokenizer.tokenize(kwic.getRight()));
     637                    tc.getSentencesLayer().addSentence(tokens);
     638                    List<String> pidAndRef = new ArrayList<String>();
     639                    if (kwic.getPid() != null) {
     640                        pidAndRef.add(kwic.getPid());
     641                    }
     642                    if (kwic.getReference() != null) {
     643                        pidAndRef.add(kwic.getReference());
     644                    }
     645                    tc.getMatchesLayer().addItem(mCorpus, targetTokens, pidAndRef);
     646                }
     647            }
     648        }
     649    }
     650   
     651   
     652    private List<Token> addToTcfTokens(List<Token> tokens, TextCorpusStored tc, String[] tokenStrings) {
     653        List<Token> addedTokens = new ArrayList<Token>(tokenStrings.length);
     654        for (String tokenString : tokenStrings) {
     655            Token token = tc.getTokensLayer().addToken(tokenString);
     656            addedTokens.add(token);
     657            tokens.add(token);
     658        }
     659        return addedTokens;
     660    }
     661   
     662    private CharSequence getExportText() {
     663        StringBuilder text = new StringBuilder();
     664        //Set<String> resultsLangs = new HashSet<String>();
     665        if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
     666            for (SearchResult result : resultsProcessed) {
     667                //resultsLangs.addAll(result.getCorpus().getLanguages());
     668                for (Kwic kwic : result.getKwics()) {
     669                    text.append(kwic.getLeft());
     670                    text.append(" ");
     671                    text.append(kwic.getKeyword());
     672                    text.append(" ");
     673                    text.append(kwic.getRight());
     674                    text.append("\n");
     675                }
     676            }
     677
     678        }
     679        if (text.length() == 0) {
     680            Messagebox.show("Nothing to export!");
     681            return null;
     682        } else {
     683            return text;
     684        }
     685    }
     686   
    438687    public void exportCSV() {
    439         String csv = getExportCSV();
     688        String csv = getExportCSV(";");
    440689        if (csv != null) {
    441690            Filedownload.save(csv.toString(), "text/plain", "ClarinDFederatedContentSearch.csv");
     
    445694   
    446695    public void exportPWCSV(String user, String pass) {
    447         String csv = getExportCSV();
     696        String csv = getExportCSV(";");
    448697        if (csv != null) {
    449698            uploadToPW(user, pass, csv.getBytes(), "text/csv",".csv");
     
    451700    }
    452701
    453     private String getExportCSV() {
     702    private String getExportCSV(String separator) {
    454703
    455704        boolean noResult = true;
    456705        StringBuilder csv = new StringBuilder();
    457706        if (resultsProcessed != null && !resultsProcessed.isEmpty()) {
    458             csv.append("\""); csv.append("LEFT CONTEXT"); csv.append("\"");
    459             csv.append(",");
    460             csv.append("\""); csv.append("KEYWORD"); csv.append("\"");
    461             csv.append(",");
    462             csv.append("\""); csv.append("RIGHT CONTEXT"); csv.append("\"");
    463             csv.append(",");
    464             csv.append("\""); csv.append("PID"); csv.append("\"");
    465             csv.append(",");
    466             csv.append("\""); csv.append("REFERENCE"); csv.append("\"");
     707            String[] headers = new String[] {
     708                    "LEFT CONTEXT", "KEYWORD", "RIGHT CONTEXT", "PID", "REFERENCE"};
     709            for (String header : headers) {
     710                csv.append("\""); csv.append(header); csv.append("\"");
     711                csv.append(separator);
     712            }
    467713            csv.append("\n");
    468714
    469715            for (SearchResult result : resultsProcessed) {
    470716                for (Kwic kwic : result.getKwics()) {
    471                     csv.append("\""); csv.append(kwic.getLeft().replace("\"", "QUOTE")); csv.append("\"");
    472                     csv.append(",");
    473                     csv.append("\""); csv.append(kwic.getKeyword().replace("\"", "QUOTE")); csv.append("\"");
    474                     csv.append(",");
    475                     csv.append("\""); csv.append(kwic.getRight().replace("\"", "QUOTE")); csv.append("\"");
    476                     csv.append(",");
     717                    csv.append("\""); csv.append(escapeQuotes(kwic.getLeft())); csv.append("\"");
     718                    csv.append(separator);
     719                    csv.append("\""); csv.append(escapeQuotes(kwic.getKeyword())); csv.append("\"");
     720                    csv.append(separator);
     721                    csv.append("\""); csv.append(escapeQuotes(kwic.getRight())); csv.append("\"");
     722                    csv.append(separator);
    477723                    csv.append("\"");
    478724                    if (kwic.getPid() != null) {
    479                         csv.append(kwic.getPid().replace("\"", "QUOTE"));
     725                        csv.append(escapeQuotes(kwic.getPid()));
    480726                    }
    481727                    csv.append("\"");
    482                     csv.append(",");
     728                    csv.append(separator);
    483729                    csv.append("\"");
    484730                    if (kwic.getReference() != null) {
    485                         csv.append(kwic.getReference().replace("\"", "QUOTE"));
     731                        csv.append(escapeQuotes(kwic.getReference()));
    486732                    }
    487733                    csv.append("\"");
     
    497743            return csv.toString();
    498744        }
     745    }
     746   
     747    private CharSequence escapeQuotes(String text) {
     748        StringBuilder sb = new StringBuilder();
     749        for (int i = 0; i < text.length(); i++) {
     750            char ch = text.charAt(i);
     751            if (ch == '"') {
     752                sb.append('"');
     753            }
     754            sb.append(ch);
     755        }
     756        return sb;
    499757    }
    500758   
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/app/WebAppListener.java

    r3062 r4069  
    77import eu.clarin.sru.fcs.aggregator.sopt.CorpusCache;
    88import eu.clarin.sru.fcs.aggregator.sopt.Languages;
     9import java.io.IOException;
     10import java.io.InputStream;
    911import java.util.Date;
    1012import java.util.HashSet;
     
    1315import java.util.logging.Level;
    1416import java.util.logging.Logger;
     17import opennlp.tools.tokenize.TokenizerModel;
    1518import org.joda.time.DateTime;
    1619import org.zkoss.zk.ui.WebApp;
     
    3639   
    3740    private Timer cacheTimer;
     41   
     42    public static final String DE_TOK_MODEL = "/tokenizer/de-tuebadz-8.0-token.bin";
    3843
    3944    @Override
     
    6772        CorporaScanCache cache = new CorporaScanCache(webapp.getRealPath("scan") + "/");
    6873        webapp.setAttribute(CORPUS_CACHE, cache);
     74       
     75        TokenizerModel model = null;
     76        try {
     77            InputStream tokenizerModelDeAsIS = this.getClass().getResourceAsStream(DE_TOK_MODEL);
     78            model = new TokenizerModel(tokenizerModelDeAsIS);
     79            tokenizerModelDeAsIS.close();
     80        } catch (IOException ex) {
     81            LOGGER.log(Level.SEVERE, "Failed to load tokenizer model", ex);
     82        }
     83        webapp.setAttribute(DE_TOK_MODEL, model);
    6984    }
    7085
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/sopt/CorpusRendererCached.java

    r3058 r4069  
    153153        Treecell cell2 = createCellForCorpusLanguage(data);
    154154        dataRow.appendChild(cell2);
     155        //Treecell cell6 = createCellForCorpusNumberOfRecords(data);
     156        //dataRow.appendChild(cell6);
    155157        Treecell cell5 = createCellForCorpusInstitution(data);
    156158        dataRow.appendChild(cell5);
     
    167169            corpusLabel.setParent(cell);
    168170        } else {
     171            String name = data.getDisplayName();
     172            // TODO: this is temp, before some endpoint
     173            // fix long names for their resources, that look
     174            // more like a description
     175            if (name.length() > 50) {
     176                int firstWordEnd = name.indexOf(" ");
     177                if (firstWordEnd > 0) {
     178                    data.setDisplayName(name.substring(0, firstWordEnd));
     179                    if (data.getDescription() == null) {
     180                        data.setDescription(name);
     181                    }
     182                }
     183            }
    169184            Label corpusLabel = new Label(data.getDisplayName());
    170185            corpusLabel.setParent(cell);
     
    210225        return cell;
    211226    }
     227   
     228    private Treecell createCellForCorpusNumberOfRecords(Corpus data) {
     229        Treecell cell = new Treecell();
     230        if (data.getNumberOfRecords() == null) {
     231            Label label = new Label("");
     232            label.setParent(cell);
     233        } else {
     234            Label label = new Label(data.getNumberOfRecords().toString());
     235            label.setParent(cell);
     236        }
     237        return cell;
     238    }
    212239
    213240    private Treecell createCellForHome(Corpus data) {
  • SRUAggregator/trunk/src/main/java/eu/clarin/sru/fcs/aggregator/sresult/SearchResult.java

    r3038 r4069  
    2020
    2121    private Corpus corpus;
     22    private String searchString;
    2223    private Future<SRUSearchRetrieveResponse> futureResponse;
    2324    private SRUSearchRetrieveResponse response;
     
    3536    }
    3637   
    37     public SearchResult(Corpus corpus) {
     38    public SearchResult(Corpus corpus, String searchString) {
    3839        this.corpus = corpus;
     40        this.searchString = searchString;
    3941    }
    4042
    4143    public Corpus getCorpus() {
    4244        return corpus;
     45    }
     46   
     47    public String getSearchString() {
     48        return searchString;
    4349    }
    4450
Note: See TracChangeset for help on using the changeset viewer.