新しいフォーマットプログラムを作成する

目標.目標

  • 流行のフォーマット化されたプログラムの仕組みを監督する

  • 処理プログラムやマッチング器の概念を理解する

  • 小さなフォーマットプログラムを作成します

体を鍛える

  1. メタデータの全てのテキスト情報を基本レイアウトで表示する新しいフォーマットプログラムを追加する。

  2. 以前のフォーマットプログラムは、テキストフィールドのタグを表示するために更新される。

  3. フォーマットされたプログラムテンプレートシステムを用いて処理プログラムのビューを提示する

  4. フォーマットされたプログラムビューにスタイルを追加します。

  5. 要素をレンダリングするための木を作成する

  6. ISO元素を用いた変換

  7. 黙認木様式を使用する

  8. すべてのデフォルトビューを使用してプログラム要素をフォーマットする

  9. デフォルト·フォーマット·ツール·ビューのカスタマイズ

  10. 処理プログラムの再ロード方法

訂正する.

Https://github.com/fgravin/core-geonnetwork/Commits/foss 4 gにアクセス

1.新しいフォーマットプログラムの作成-/schemas/iso 19139/src/main/plugin/iso 19139/Formatterに‘foss 4 g’という新しいフォルダを作成します-この新しいフォルダに新しいgroovyファイルを作成します-テキスト情報は格納されています gco:CharacterString

handlers.add 'gco:CharacterString', {el -> "<div>${el.text()}</div>"}
  1. マッチを追加して遊びます name そして text 属性です。

handlers.add select: {el -> !el.'gco:CharacterString'.text().isEmpty()}, {el ->
    "<div><b>${el.name()}</b> - ${el.text()}</div>"
}
  1. 使用 handlers.fileResult 機能

  • view.groovy

    handlers.add select: {el -> !el.'gco:CharacterString'.text().isEmpty()}, {el ->
        handlers.fileResult('foss4g/elem.html', [name: el.name(), text: el.text()])
    }
    
  • elem.html

    <dl>
        <dt>{{name}}</dt>
        <dd>{{text}}</dd>
    </dl>
    
  1. Wro 4 jでチェックされたフォルダにカスタムの少ないファイルを追加し,フォーマットプログラムにリンクする.

  • formatter.less

    dt {
        width: 230px;
        font-weight: normal;
        font-style: italic;
        color: #555555;
        clear: none;
        padding-left: 15px;
        text-align: left;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        float: left;
      }
    
      dd {
        margin-left: 250px;
        border-left: 1px solid #999999;
        padding-left: 1em;
        background: #eeeeee;
    }
    
  • view.groovy

    handlers.start {
        '''<link rel="stylesheet" href="../../static/formatter.css"/>
          <div class="container">'''
    }
    handlers.end {
        '</div>'
    }
    
    handlers.add select: {el -> !el.'gco:CharacterString'.text().isEmpty()}, {el ->
        handlers.fileResult('foss4g/elem.html', [name: el.name(), text: el.text()])
    }
    
  1. 使用 fmt-repeat-only-children テンプレートと prent() 機能します。

  • view.groovy

    ...
    handlers.add select: {el -> !el.'gco:CharacterString'.text().isEmpty()},
              group: true, {els ->
          def elements = els.collect {el ->
              [name: el.name(), text: el.text()]
          }
          handlers.fileResult('foss4g/elem.html',
                  [elements: elements, parent: els[0].parent().name()])
    }
    
  • elem.html

    <dl>
        <h3>{{parent}}</h3>
        <div fmt-repeat="el in elements" fmt-repeat-only-children="true">
          <dt>{{el.name}}</dt>
          <dd>{{el.text}}</dd>
        </div>
    </dl>
    
  1. nodeLabel 機能

  • view.groovy

...
handlers.add select: {el -> !el.'gco:CharacterString'.text().isEmpty()},
         group: true, {els ->
     def elements = els.collect {el ->
         [name: f.nodeLabel(el), text: el.text()]
     }
     handlers.fileResult('foss4g/elem.html',
             [elements: elements, parent: f.nodeLabel(els[0].parent())])
 }
  1. 増列する. gn-metadata-view クラスはあなたのコンテナに設定され、処理プログラムが更新されます。

  • view.groovy

handlers.start {
   '''<div class="gn-metadata-view container">'''
}
handlers.end {
   '</div>'
}

def isoHandlers = new iso19139.Handlers(handlers, f, env)

handlers.add select: isoHandlers.matchers.isTextEl, isoHandlers.isoTextEl
handlers.add name: 'Container Elements',
       select: isoHandlers.matchers.isContainerEl,
       priority: -1,
       isoHandlers.commonHandlers.entryEl(f.&nodeLabel,
                                          isoHandlers.addPackageViewClass)
isoHandlers.addExtentHandlers()
  1. SummaryFactory 級友たち。

  • view.groovy

import iso19139.SummaryFactory

def isoHandlers = new iso19139.Handlers(handlers, f, env)

SummaryFactory.summaryHandler({it.parent() is it.parent()}, isoHandlers)

isoHandlers.addDefaultHandlers()
  1. カスタムオプションを追加する SummaryFactory

  • view.groovy

import iso19139.SummaryFactory

def isoHandlers = new iso19139.Handlers(handlers, f, env)

def factory = new SummaryFactory(isoHandlers, {summary ->
   summary.title = "My Title"
   summary.addCompleteNavItem = false
   summary.addOverviewNavItem = false
   summary.associated.clear()
})


handlers.add name: "Summary Handler",
       select: {it.parent() is it.parent()},
       {factory.create(it).getResult()}
isoHandlers.addDefaultHandlers()
  1. カスタマイズされた行為を iso19139.Handlers 構造関数

  • view.groovy

def isoHandlers = new iso19139.Handlers(handlers, f, env) {
    {
        def oldImpl = super.isoTextEl
        isoTextEl = { el ->
            "----------- ${oldImpl(el)}"
        }
    }
}