public boolean doGet(
      MappedResource resource,
      Property property,
      boolean isInverse,
      HttpServletRequest request,
      HttpServletResponse response,
      Configuration config)
      throws IOException {
    Model descriptions = getAnonymousPropertyValues(resource, property, isInverse);
    if (descriptions.size() == 0) {
      return false;
    }

    Resource r = descriptions.getResource(resource.getWebURI());
    List resourceDescriptions = new ArrayList();
    StmtIterator it =
        isInverse ? descriptions.listStatements(null, property, r) : r.listProperties(property);
    while (it.hasNext()) {
      Statement stmt = it.nextStatement();
      RDFNode value = isInverse ? stmt.getSubject() : stmt.getObject();
      if (!value.isAnon()) {
        continue;
      }
      resourceDescriptions.add(
          new ResourceDescription((Resource) value.as(Resource.class), descriptions, config));
    }

    Model description = getResourceDescription(resource);
    ResourceDescription resourceDescription =
        new ResourceDescription(resource, description, config);

    String title =
        resourceDescription.getLabel()
            + (isInverse ? " ? " : " ? ")
            + config.getPrefixes().getNsURIPrefix(property.getNameSpace())
            + ":"
            + property.getLocalName();
    VelocityHelper template = new VelocityHelper(getServletContext(), response);
    Context context = template.getVelocityContext();
    context.put("project_name", config.getProjectName());
    context.put("project_link", config.getProjectLink());
    context.put("title", title);
    context.put("server_base", config.getWebApplicationBaseURI());
    context.put("sparql_endpoint", resource.getDataset().getDataSource().getEndpointURL());
    context.put("back_uri", resource.getWebURI());
    context.put("back_label", resourceDescription.getLabel());
    context.put(
        "rdf_link",
        isInverse ? resource.getInversePathDataURL(property) : resource.getPathDataURL(property));
    context.put("resources", resourceDescriptions);
    template.renderXHTML("pathpage.vm");
    return true;
  }
  /**
   * Process the blog entries
   *
   * @param httpServletRequest Request
   * @param httpServletResponse Response
   * @param user {@link BlogUser} instance
   * @param context Context
   * @param entries Blog entries retrieved for the particular request
   * @return Modified set of blog entries
   * @throws BlojsomPluginException If there is an error processing the blog entries
   */
  public BlogEntry[] process(
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse,
      BlogUser user,
      Map context,
      BlogEntry[] entries)
      throws BlojsomPluginException {

    entries = super.process(httpServletRequest, httpServletResponse, user, context, entries);

    BlogCalendar blogCalendar = (BlogCalendar) context.get(BLOJSOM_CALENDAR);

    VelocityHelper vtlhelper = new VelocityHelper(blogCalendar);
    vtlhelper.buildCalendar();

    context.put(BLOJSOM_CALENDAR_VTLHELPER, vtlhelper);

    return entries;
  }
  /**
   * CLAIM送信を行う。
   *
   * @param sendModel 送信するDocuentModel
   * @throws Exception
   */
  public void send(DiagnosisSendWrapper wrapper) throws Exception {

    // s.oh^ 2013/12/10 傷病名のCLAIM送信する/しない
    Properties config = new Properties();
    StringBuilder sbPath = new StringBuilder();
    sbPath.append(System.getProperty("jboss.home.dir"));
    sbPath.append(File.separator);
    sbPath.append("custom.properties");
    File f = new File(sbPath.toString());
    FileInputStream fin = new FileInputStream(f);
    InputStreamReader isr = new InputStreamReader(fin, "JISAutoDetect");
    config.load(isr);
    isr.close();
    String claimSend = config.getProperty("diagnosis.claim.send");
    if (claimSend != null && claimSend.equals("false")) {
      return;
    }
    // s.oh$

    // 新規病名
    List<RegisteredDiagnosisModel> addedDiagnosis = wrapper.getAddedDiagnosis();

    // 更新病名
    List<RegisteredDiagnosisModel> updatedDiagnosis = wrapper.getUpdatedDiagnosis();

    // minagawa^ LSC 1.4 傷病名の削除 2013/06/24
    // 削除病名
    List<RegisteredDiagnosisModel> deletedDiagnosis = wrapper.getDeletedDiagnosis();
    // minagawa$

    // 実際にCLAIM送信する病名
    List<RegisteredDiagnosisModel> actualList = new ArrayList<RegisteredDiagnosisModel>();

    // 新規病名を送信する
    if (addedDiagnosis != null && addedDiagnosis.size() > 0) {

      for (RegisteredDiagnosisModel rdm : addedDiagnosis) {
        if (isDorcaUpdatedDisease(rdm) || isPureDisease(rdm)) {
          actualList.add(rdm);
        }
      }

      if (!actualList.isEmpty()) {
        if (DEBUG) {
          debug("-------- Send Diagnosis List to add ----------------");
          for (RegisteredDiagnosisModel r : actualList) {
            debug(r.getDiagnosis());
          }
        }
      }
    }

    // 更新された病名を CLAIM 送信する
    // detuched object のみ
    if (updatedDiagnosis != null && updatedDiagnosis.size() > 0) {
      if (DEBUG) {
        debug("-------- Send Diagnosis List to update ----------------");
        for (RegisteredDiagnosisModel r : updatedDiagnosis) {
          debug(r.getDiagnosis());
        }
      }
      actualList.addAll(updatedDiagnosis);
    }

    // minagawa^ LSC 1.4 傷病名の削除 2013/06/24
    if (deletedDiagnosis != null && deletedDiagnosis.size() > 0) {
      if (DEBUG) {
        debug("-------- Send Diagnosis List to delete ----------------");
        for (RegisteredDiagnosisModel r : updatedDiagnosis) {
          debug(r.getDiagnosis());
        }
      }
      actualList.addAll(deletedDiagnosis);
    }

    if (actualList.isEmpty()) {
      return;
    }
    // minagawa$

    // DocInfo & RD をカプセル化したアイテムを生成する
    ArrayList<DiagnosisModuleItem> moduleItems = new ArrayList<DiagnosisModuleItem>();

    for (RegisteredDiagnosisModel rd : actualList) {

      DocInfoModel docInfo = new DocInfoModel();

      docInfo.setDocId(GUIDGenerator.generate(docInfo));
      docInfo.setTitle(IInfoModel.DEFAULT_DIAGNOSIS_TITLE);
      docInfo.setPurpose(IInfoModel.PURPOSE_RECORD);
      docInfo.setFirstConfirmDate(ModelUtils.getDateTimeAsObject(rd.getConfirmDate()));
      docInfo.setConfirmDate(ModelUtils.getDateTimeAsObject(rd.getFirstConfirmDate()));

      // s.oh^ 2013/05/10 傷病名対応
      rd.setDiagnosisCode(HAND_CODE); // ORCAから取り込んだ場合、コードに0000999を設定する
      // s.oh$

      DiagnosisModuleItem mItem = new DiagnosisModuleItem();
      mItem.setDocInfo(docInfo);
      mItem.setRegisteredDiagnosisModule(rd);
      moduleItems.add(mItem);
    }

    // ヘルパー用の値を生成する
    String confirmDate = wrapper.getConfirmDate();

    // ヘルパークラスを生成する
    DiseaseHelper dhl = new DiseaseHelper();
    dhl.setPatientId(wrapper.getPatientId()); // 患者ID
    dhl.setConfirmDate(confirmDate); // 確定日
    dhl.setDiagnosisModuleItems(moduleItems); // RD+DocInfo
    dhl.setGroupId(GUIDGenerator.generate(dhl)); // GroupId

    dhl.setDepartment(wrapper.getDepartment()); // 診療科コード
    dhl.setDepartmentDesc(wrapper.getDepartmentDesc()); // 診療科名
    dhl.setCreatorName(wrapper.getCreatorName()); // 担当医名
    dhl.setCreatorId(wrapper.getCreatorLicense()); // 担当医コード
    dhl.setJmariCode(wrapper.getJamariCode()); // JMARI code
    dhl.setCreatorLicense(wrapper.getCreatorLicense()); // 医療資格
    dhl.setFacilityName(wrapper.getFacilityName()); // 施設名

    if (DEBUG) {
      debug("患者ID=" + dhl.getPatientId());
      debug("確定日=" + dhl.getConfirmDate());
      debug("GroupId=" + dhl.getGroupId());
      debug("診療科コード=" + dhl.getDepartment());
      debug("診療科名=" + dhl.getDepartmentDesc());
      debug("担当医名=" + dhl.getCreatorName());
      debug("担当医コード=" + dhl.getCreatorId());
      debug("JMARI code=" + dhl.getJmariCode());
      debug("医療資格=" + dhl.getCreatorLicense());
      debug("施設名=" + dhl.getFacilityName());
    }

    // ログのために基本情報を生成する
    StringBuilder sb = new StringBuilder();
    sb.append(confirmDate).append(" ");
    sb.append(wrapper.getPatientId()).append(" ");
    sb.append(wrapper.getPatientName()).append(" ");
    sb.append(wrapper.getPatientGender());
    String baseInfo = sb.toString();

    // --------------------------------------------------------
    // CLIAM message を生成する
    // --------------------------------------------------------
    VelocityContext context = VelocityHelper.getContext();
    context.put(OBJECT_NAME, dhl);
    StringWriter sw = new StringWriter();
    BufferedWriter bw = new BufferedWriter(sw);
    Velocity.mergeTemplate(TEMPLATE_NAME, TEMPLATE_ENC, context, bw);
    bw.flush();
    bw.close();
    String claimMessage = sw.toString();
    // minagawa^ CLAIM Log
    log(claimMessage);
    //        if (DEBUG) {
    //            debug(claimMessage);
    //        }
    // minagawa$
    // --------------------------------------------------------

    // ORCAへ接続する
    Socket socket = new Socket(host, port);
    OutputStream out = socket.getOutputStream();
    DataOutputStream dout = new DataOutputStream(out);
    BufferedOutputStream writer = new BufferedOutputStream(dout);

    InputStream in = socket.getInputStream();
    DataInputStream din = new DataInputStream(in);
    BufferedInputStream reader = new BufferedInputStream(din);

    // Writes UTF8 data
    writer.write(claimMessage.getBytes(enc));
    writer.write(EOT);
    writer.flush();

    // Reads result
    int c = reader.read();
    if (c == ACK) {
      sb = new StringBuilder();
      sb.append(ACK_STR).append(baseInfo);
      log(sb.toString());
    } else if (c == NAK) {
      sb = new StringBuilder();
      sb.append(NAK_STR).append(baseInfo);
      log(sb.toString());
    }

    writer.close();
    reader.close();
    socket.close();
  }