public TwitterFollowPanel(String id, IModel<TwitterFollowModel> model) {
   super(id, model);
   ExternalLink twitterFollowLink = new ExternalLink("url", model.getObject().getUrl());
   twitterFollowLink.add(
       new AttributeModifier("data-show-count", model.getObject().getShowCount().toString()));
   add(twitterFollowLink);
   Label twitterNameLabel = new Label("twitterNameLabel", model.getObject().getUsername());
   twitterFollowLink.add(twitterNameLabel);
 }
Exemple #2
0
 public LinkPanel(
     String wicketId, String linkCssClass, String label, String href, boolean newWindow) {
   super(wicketId);
   this.labelModel = new Model<String>(label);
   ExternalLink link = new ExternalLink("link", href);
   if (newWindow) {
     link.add(new SimpleAttributeModifier("target", "_blank"));
   }
   if (linkCssClass != null) {
     link.add(new SimpleAttributeModifier("class", linkCssClass));
   }
   link.add(new Label("icon").setVisible(false));
   link.add(new Label("label", labelModel));
   add(link);
 }
  public GlossResultsSeparatedPanel(String id, IModel<List<SegmentedWord>> model) {
    super(id, model);

    Form<List<SegmentedWord>> form = new Form<>("form", model);
    add(form);

    Border textBorder =
        new HeaderPanel(
            "text",
            hid ->
                new HeaderButtonTitlePanel(
                    hid,
                    Model.of("Text"),
                    bid ->
                        new EditButton(bid, new ResourceModel("label.edit")).setSize(Size.Small)));
    form.add(textBorder);

    textBorder.add(
        new ListView<>(
            "text",
            model,
            item -> {
              ExternalLink link =
                  new ExternalLink(
                      "word",
                      Model.of("#def_link_" + item.getIndex()),
                      new LambdaModel<>(
                          item.getModel(), new OptionalFunction<>(SegmentedWord.FUNCTION_TEXT)));
              link.add(
                  new EnabledModelBehavior(
                      new SupplierModel<>(() -> item.getModelObject().hasDefinition())));
              link.setMarkupId("word_link_" + item.getIndex());
              item.add(link);
            }));

    Border defBorder = new HeaderPanel("defs", Model.of("Definitions"));
    form.add(defBorder);

    defBorder.add(
        new ListView<>(
            "defs",
            model,
            item ->
                item.add(
                        new WordPartsListPanel(
                            "def",
                            item.getModel(),
                            new SupplierModel<>(() -> "#word_link_" + item.getIndex())))
                    .setMarkupId("def_link_" + item.getIndex())
                    .add(
                        new VisibleModelBehavior(
                            new SupplierModel<>(() -> item.getModelObject().hasDefinition())))));
  }
  public AbstractHtmlNotificationPanel(String id, IModel<T> model) {
    super(id, model);

    WebMarkupContainer root = new TransparentWebMarkupContainer("root");
    root.add(new StyleAttributeAppender(STYLE_ROOT));
    add(root);

    WebMarkupContainer mainContainer = new TransparentWebMarkupContainer("mainContainer");
    mainContainer.add(new StyleAttributeAppender(STYLE_MAIN_CONTAINER));
    root.add(mainContainer);

    mainContainer.add(new CustomWebMarkupContainer("mainTitle", STYLE_MAIN_TITLE));

    WebMarkupContainer footer = new CustomWebMarkupContainer("footer", STYLE_FOOTER);
    mainContainer.add(footer);

    ExternalLink aboutLink =
        new ExternalLink("aboutLink", notificationUrlBuilderService.getAboutUrl());
    aboutLink.add(new StyleAttributeAppender(STYLE_LINK_FOOTER));
    footer.add(aboutLink);
  }
    public CrowdProjectDetailForm(String id) {
      super(id, new CompoundPropertyModel<SelectionModel>(new SelectionModel()));

      add(new TextField<String>("name").setRequired(true));

      add(new TextField<String>("apiKey"));

      useSentenceTextField =
          new NumberTextField<Integer>(
              "useSents",
              new LoadableDetachableModel<Integer>() {

                private static final long serialVersionUID = 1L;

                @Override
                protected Integer load() {
                  return selectedCrowdJob == null ? -1 : selectedCrowdJob.getUseSents();
                }
              });
      useSentenceTextField.setType(Integer.class);
      add(useSentenceTextField);

      useGoldSentenceTextField =
          new NumberTextField<Integer>(
              "useGoldSents",
              new LoadableDetachableModel<Integer>() {

                private static final long serialVersionUID = 1L;

                @Override
                protected Integer load() {
                  return selectedCrowdJob == null ? -1 : selectedCrowdJob.getUseGoldSents();
                }
              });
      useGoldSentenceTextField.setType(Integer.class);
      add(useGoldSentenceTextField);

      ExternalLink link1;
      ExternalLink link2;

      IModel<String> link1_model =
          new LoadableDetachableModel<String>() {
            private static final long serialVersionUID = -2140663269255140643L;

            @Override
            protected String load() {
              if (selectedCrowdJob != null) {
                return selectedCrowdJob.getLink1();
              } else {
                return "";
              }
            }
          };

      IModel<String> link2_model =
          new LoadableDetachableModel<String>() {
            private static final long serialVersionUID = -2140663269255140643L;

            @Override
            protected String load() {
              if (selectedCrowdJob != null) {
                return selectedCrowdJob.getLink2();
              } else {
                return "";
              }
            }
          };

      add(link1 = new ExternalLink("link1", link1_model));
      add(link2 = new ExternalLink("link2", link2_model));

      link1.add(
          new Label(
              "label1",
              new LoadableDetachableModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                protected String load() {
                  return selectedCrowdJob.getLink1();
                }
              }));

      link2.add(
          new Label(
              "label2",
              new LoadableDetachableModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                protected String load() {
                  return selectedCrowdJob.getLink2();
                }
              }));

      add(
          new Label(
              "status",
              new LoadableDetachableModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                protected String load() {
                  return selectedCrowdJob.getStatus();
                }
              }));

      add(
          new Label(
              "availSentences",
              new LoadableDetachableModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                protected String load() {
                  return String.valueOf(getSourceDocumentsSentCount());
                }
              }));

      add(
          new Label(
              "availGoldSentences",
              new LoadableDetachableModel<String>() {
                private static final long serialVersionUID = 1L;

                @Override
                protected String load() {
                  return String.valueOf(getGoldDocumentsSentCount());
                }
              }));

      // TODO: more comments
      add(new ListMultipleChoice<SourceDocument>("documents") {
            private static final long serialVersionUID = 1L;

            {
              setChoices(
                  new LoadableDetachableModel<List<SourceDocument>>() {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected List<SourceDocument> load() {

                      if (selectedCrowdJob != null) {
                        documents = new ArrayList<SourceDocument>(selectedCrowdJob.getDocuments());
                        Collections.sort(
                            documents,
                            new Comparator<SourceDocument>() {
                              @Override
                              public int compare(SourceDocument doc1, SourceDocument doc2) {
                                return (doc1.getProject().getName() + doc1.getName())
                                    .compareTo(doc2.getProject().getName() + doc2.getName());
                              }
                            });
                      }
                      return documents;
                    }
                  });
              setChoiceRenderer(
                  new ChoiceRenderer<SourceDocument>() {
                    private static final long serialVersionUID = 4332411944787665963L;

                    @Override
                    public Object getDisplayValue(SourceDocument aObject) {
                      return aObject.getName();
                    }
                  });
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          })
          .setOutputMarkupId(true);

      add(new ListMultipleChoice<SourceDocument>("goldDocuments") {
            private static final long serialVersionUID = 1L;

            {
              setChoices(
                  new LoadableDetachableModel<List<SourceDocument>>() {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected List<SourceDocument> load() {

                      if (selectedCrowdJob != null) {
                        goldDocuments =
                            new ArrayList<SourceDocument>(selectedCrowdJob.getGoldDocuments());
                        Collections.sort(
                            goldDocuments,
                            new Comparator<SourceDocument>() {
                              @Override
                              public int compare(SourceDocument doc1, SourceDocument doc2) {
                                return (doc1.getProject().getName() + doc1.getName())
                                    .compareTo(doc2.getProject().getName() + doc2.getName());
                              }
                            });
                      }

                      return goldDocuments;
                    }
                  });
              setChoiceRenderer(
                  new ChoiceRenderer<SourceDocument>() {
                    private static final long serialVersionUID = 4332411944787665963L;

                    @Override
                    public Object getDisplayValue(SourceDocument aObject) {
                      return aObject.getName();
                    }
                  });
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          })
          .setOutputMarkupId(true);

      // save the crowd task
      add(
          new Button("save", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              String name = crowdJobDetailForm.getModelObject().name;
              // rename task
              if (selectedCrowdJob != null && !repository.existsCrowdJob(name)) {
                selectedCrowdJob.setName(name);
                selectedCrowdJob.setProject(selectedProject);
                selectedCrowdJob.setApiKey(crowdJobDetailForm.getModelObject().apiKey);
                try {
                  repository.createCrowdJob(selectedCrowdJob);
                } catch (IOException e) {
                  error("Problem Processing Log file");
                }
                createCrowdJob = false;
                updateTable();

              }
              // save new task
              else if (!repository.existsCrowdJob(name)) {
                CrowdJob crowdJob = new CrowdJob();
                crowdJob.setName(name);
                selectedCrowdJob.setProject(selectedProject);
                try {
                  repository.createCrowdJob(crowdJob);
                } catch (IOException e) {
                  error("Problem Processing Log file");
                }
                selectedCrowdJob = crowdJob;
                createCrowdJob = false;
                updateTable();
              } else {
                selectedCrowdJob.setApiKey(crowdJobDetailForm.getModelObject().apiKey);
                try {
                  repository.createCrowdJob(selectedCrowdJob);
                } catch (IOException e) {
                  error("Problem Processing Log file");
                }
                error("Task [" + name + " ] already created!");
              }
            }
          });

      // remove the crowd project
      add(
          new Button("remove", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              repository.removeCrowdJob(selectedCrowdJob);
              updateTable();
              crowdJobDetailForm.setVisible(false);
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          });

      // add documents to the crowd source project
      add(
          new Button("addDocuments", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              crowdDocumentListForm.setVisible(true);
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          });

      // add documents to the crowd source project
      add(
          new Button("addGoldDocuments", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              goldDocumentListForm.setVisible(true);
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          });

      // remove document from the crowd job
      add(
          new Button("removeDocument", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              List<SourceDocument> sourceDocuments =
                  new ArrayList<SourceDocument>(selectedCrowdJob.getDocuments());
              sourceDocuments.removeAll(CrowdProjectDetailForm.this.getModelObject().documents);
              selectedCrowdJob.setDocuments(new HashSet<SourceDocument>(sourceDocuments));
              try {
                repository.createCrowdJob(selectedCrowdJob);
              } catch (IOException e) {
                error("Problem Processing Log file");
              }
              documents.removeAll(CrowdProjectDetailForm.this.getModelObject().documents);
              crowdDocumentListForm.setModelObject(new SelectionModel());
              updateTable();
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          });

      // remove gold documents from the crowd job
      add(
          new Button("removeGoldDocument", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              List<SourceDocument> goldSourceDocuments =
                  new ArrayList<SourceDocument>(selectedCrowdJob.getGoldDocuments());
              goldSourceDocuments.removeAll(
                  CrowdProjectDetailForm.this.getModelObject().goldDocuments);
              selectedCrowdJob.setGoldDocuments(new HashSet<SourceDocument>(goldSourceDocuments));
              try {
                repository.createCrowdJob(selectedCrowdJob);
              } catch (IOException e) {
                error("Problem Processing Log file");
              }
              goldDocuments.removeAll(CrowdProjectDetailForm.this.getModelObject().goldDocuments);
              goldDocumentListForm.setModelObject(new SelectionModel());
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          });

      // send document to crowd flower and get back status and link
      add(
          new Button("uploadT1", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {

              if (namedEntityTaskManager == null) {
                namedEntityTaskManager = new NamedEntityTaskManager();
              }

              namedEntityTaskManager.setAPIKey(selectedCrowdJob.getApiKey());
              User user = userRepository.get(CROWD_USER);

              List<JCas> jCases = getSourceDocumentsJCases(user);
              // Get the JCASes for each gold document
              List<JCas> goldJCases = getGoldDocumentsJCases(user);
              /*     int useSent = useSentenceTextField.getModelObject() ==0?-1:useSentenceTextField.getModelObject();
              int useGoldSent = useGoldSentenceTextField.getModelObject() ==0?*/

              try {
                String template =
                    FileUtils.readFileToString(repository.getTemplate(CROWD_NERTASK1_TEMPLATE));
                selectedCrowdJob.setUseSents(useSentenceTextField.getModelObject());
                selectedCrowdJob.setUseGoldSents(useGoldSentenceTextField.getModelObject());

                String task1ID =
                    namedEntityTaskManager.uploadNewNERTask1(
                        template,
                        jCases,
                        goldJCases,
                        useSentenceTextField.getModelObject() == 0
                            ? -1
                            : useSentenceTextField.getModelObject(),
                        useGoldSentenceTextField.getModelObject());
                selectedCrowdJob.setTask1Id(task1ID);
                selectedCrowdJob.setStatus(namedEntityTaskManager.getStatusString(task1ID, ""));

                repository.createCrowdJob(selectedCrowdJob);

                int omittedSentences = namedEntityTaskManager.getOmittedSentences();
                if (omittedSentences == 0) {
                  info("Crowdflower task " + task1ID + " uploaded succesfully.");
                } else {
                  warn(
                      "Crowdflower task "
                          + task1ID
                          + " uploaded succesfully, but "
                          + omittedSentences
                          + " sentences were omitted due to processing errors (see log).");
                }
              } catch (FileNotFoundException e) {
                error("Could not find the template file for NER task 1: " + e.getMessage());
              } catch (JsonProcessingException e) {
                error("Template for NER task 1 is mal formated: " + e.getMessage());
              } catch (IOException e) {
                error(
                    "There was a problem reading the NER task 1 template file: " + e.getMessage());
              } catch (Exception e) {
                error(
                    "Something went wrong uploading your document(s) to crowdflower.com: "
                        + e.getMessage());
              }
            }
          });

      // send document to crowd flower and get back status and link
      add(
          new Button("uploadT2", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              if (namedEntityTaskManager == null) {
                namedEntityTaskManager = new NamedEntityTaskManager();
              }

              namedEntityTaskManager.setAPIKey(selectedCrowdJob.getApiKey());
              User user = userRepository.get(CROWD_USER);

              List<JCas> jCases = getSourceDocumentsJCases(user);

              // Get the JCASes for each gold document
              List<JCas> goldJCases = getGoldDocumentsJCases(user);
              try {

                String task1ID = selectedCrowdJob.getTask1Id();

                if (task1ID == null) {
                  error("Task1 not yet completed");
                  return;
                }

                String template =
                    FileUtils.readFileToString(repository.getTemplate(CROWD_NERTASK2_TEMPLATE));
                String task2ID =
                    namedEntityTaskManager.uploadNewNERTask2(template, task1ID, jCases, goldJCases);
                selectedCrowdJob.setTask2Id(task2ID);
                repository.createCrowdJob(selectedCrowdJob);

                int omittedSentences = namedEntityTaskManager.getOmittedSentences();
                if (omittedSentences == 0) {
                  info("Crowdflower task " + task2ID + " uploaded succesfully.");
                } else {
                  warn(
                      "Crowdflower task "
                          + task2ID
                          + " uploaded succesfully, but "
                          + omittedSentences
                          + " sentences were omitted due to processing errors (see log).");
                }

              } catch (FileNotFoundException e) {
                error("Could not find the template file for NER task 1: " + e.getMessage());
              } catch (JsonProcessingException e) {
                error("Template for NER task 1 is mal formated: " + e.getMessage());
              } catch (IOException e) {
                error(
                    "There was a problem reading the NER task 1 template file: " + e.getMessage());
              } catch (Exception e) {
                error(
                    "Something went wrong uploading your document(s) to crowdflower.com: "
                        + e.getMessage());
              }
            }

            @Override
            public boolean isVisible() {
              return true;
            }
          });

      add(
          new Button("retrieveT2", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              try {
                if (namedEntityTaskManager == null) {
                  namedEntityTaskManager = new NamedEntityTaskManager();
                }

                namedEntityTaskManager.setAPIKey(selectedCrowdJob.getApiKey());
                User user = userRepository.get(CROWD_USER);

                List<SourceDocument> sourceDocuments =
                    new ArrayList<SourceDocument>(selectedCrowdJob.getDocuments());
                List<JCas> jCases = getSourceDocumentsJCases(user);

                String task2ID = selectedCrowdJob.getTask2Id();

                if (task2ID == null) {
                  error("Task2 not yet completed");
                  return;
                }

                // clear previous annotation / imports for the crowd user
                int i = 0;
                for (JCas cas : jCases) {
                  BratAnnotatorUtility.clearJcasAnnotations(
                      cas, sourceDocuments.get(i), user, repository);
                  i++;
                }

                // import job results from crowdflwoer
                namedEntityTaskManager.setCrowdJobAnnotationsInDocs(task2ID, jCases);

                // save all changed document annotations on disk
                i = 0;
                for (JCas cas : jCases) {
                  SourceDocument document = sourceDocuments.get(i);
                  repository.writeAnnotationCas(cas, document, user);
                  i++;
                }
                int omittedEntities = namedEntityTaskManager.getOmittedEntities();

                if (omittedEntities == 0) {
                  info("Crowdflower job annotations imported succesfully for this task.");
                } else {
                  warn(
                      "Warning: Crowdflower job annotations imported succesfully for this task, but "
                          + omittedEntities
                          + " annotations were omitted due to processing errors (see log).");
                }
              } catch (JsonProcessingException e) {
                error("Json processing problem: " + e.getMessage());
              } catch (IOException e) {
                error("Input/Output exception: " + e.getMessage());
              } catch (Exception e) {
                error(
                    "Something went wrong importing your document(s) from crowdflower.com: "
                        + e.getMessage());
              }
            }

            @Override
            public boolean isVisible() {
              return true;
            }
          });

      // update the status of this source document from crowd
      add(
          new Button("update", new ResourceModel("label")) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onSubmit() {
              if (namedEntityTaskManager == null) {
                namedEntityTaskManager = new NamedEntityTaskManager();
              }
              namedEntityTaskManager.setAPIKey(selectedCrowdJob.getApiKey());

              String id1 = selectedCrowdJob.getTask1Id();
              if (id1 == null) {
                id1 = "";
              }
              String id2 = selectedCrowdJob.getTask2Id();
              if (id2 == null) {
                id2 = "";
              }

              String status = namedEntityTaskManager.getStatusString(id1, id2);
              selectedCrowdJob.setStatus(status);
              try {
                repository.createCrowdJob(selectedCrowdJob);
              } catch (IOException e) {
                error("Problem Processing Log file");
              }
            }

            @Override
            public boolean isVisible() {
              return !createCrowdJob;
            }
          });
    }