/** Patent Fetcher
*
* Usage: Button on a Query form in the Markush Demo Data set, which has the edges of VMNS and then Inventions.
* It can be adapted to other dataTrees by locating the Inventions table among the dataTree
*
* @author Erin Bolstad (ebolstad@chemaxon.com)
* Dec 2011
*/
import java.awt.Desktop
import com.im.commons.progress.*
import groovy.swing.SwingBuilder
import javax.swing.SwingUtilities
evaluate = { widget ->
if (SwingUtilities.isEventDispatchThread()) {
Thread.start() {
evaluateImpl(widget)
}
} else {
evaluateImpl(widget)
}
}
evaluateImpl = { widget ->
def rs = widget.form.resultSet
def dataTree = rs.getDataTree()
def VMNSvertex = dataTree.rootVertex.edges.find { it.destination.entity.name == 'VMNS' }
def inventionVertex = VMNSvertex.destination.edges.find { it.destination.entity.name == 'Inventions' }
def inventionEty = inventionVertex.destination.entity
def inventionPatentFld = inventionEty.fields.items.find { it.name == 'Patents' }
def invenV = inventionVertex.getDestination()
def invenVS = rs.getVertexState(invenV)
def invenIds = invenVS.selectedRowsIds
def invenFirstId = invenIds.get(0)
def invenGetData = invenVS.getData([invenFirstId], DFEnvironmentRO.DEV_NULL)
def patArray = invenGetData[invenFirstId][inventionPatentFld.id]
def patMaster = patArray.replace("*", "master")
def patentArray = patMaster.split("\\r?\\n")
patArray = ["-"]
patentArray.eachWithIndex { num, m ->
def trimLocation = num.indexOf("-")
def patentTrimmed = num.subSequence(0, trimLocation)
patArray.add(patentTrimmed)
if (num.contains("master")){
MASTER_PATENT = num
}
}
// Clean the master patent
def masterRemoved = MASTER_PATENT.replace("master", "")
def blanksRemoved = masterRemoved.replace(" ", "")
MASTER_PATENT = blanksRemoved
// master patent now to be matched against resource
def patentToTrim = MASTER_PATENT
def patentAssignment = MASTER_PATENT.substring(0, 2)
switch (patentAssignment) {
case "WO":
def trimLocation = patentToTrim.indexOf("-")
def patentTrimmed = patentToTrim.subSequence(0, trimLocation)
LEAD = "http://www.wipo.int/patentscope/search/en/detail.jsf?docId=" + patentTrimmed
break
case "US":
def trimLocation = patentToTrim.indexOf("-")
def endTrimmed = patentToTrim.subSequence(0, trimLocation)
def patentLength = endTrimmed.length()
def patentTrimmed = endTrimmed.subSequence(2, patentLength)
LEAD = "http://www.patentlens.net/patentlens/patents.html?patnums=US_" + patentTrimmed + "&returnTo=patentnumber.html" + patentTrimmed
break
default:
def trimLocation = patentToTrim.indexOf("-")
def patentTrimmed = patentToTrim.subSequence(0, trimLocation)
LEAD = "http://worldwide.espacenet.com/searchResults?DB=EPODOC&submitted=true&locale=en_EP&ST=singleline&compact=false&DB=EPODOC&query=" + patentTrimmed
break
}
def s = new SwingBuilder()
s.setVariable('myDialog-properties',[:])
def vars = s.variables
patentToTrim = MASTER_PATENT
def trimLocation = patentToTrim.indexOf("-")
def leadButton = patentToTrim.subSequence(0, trimLocation)
def dial = s.dialog(title:'Patent Selection',id:'myDialog',modal:true) {
panel() {
gridBagLayout()
label (text:"Retrieve the lead patent using our best guess to the location:", constraints:gbc(
gridx:0,
gridy:0,
insets:[10,20,10,0]))
button (id:'lead', label:"Lead Patent: $leadButton", constraints:gbc(
gridx:1,
gridy:0,
insets:[10,0,10,20],
anchor:LINE_START),
actionPerformed: {
vars.buttonResult = 'lead'
dispose()})
label(text:"---", constraints:gbc(
gridy:1,
gridwidth:2))
label(text:"Or, select the patent from the invention to view, and the web location", constraints:gbc(
gridy:2,
gridwidth:2,
insets:[10,0,0,0]))
label(text:"Some sites only work with patents from certain countries.", constraints:gbc(
gridy:3,
gridwidth:2,
insets:[0,0,10,0]))
label(text:"Select patent", constraints:gbc(
gridx:0,
gridy:4,
anchor:LINE_END))
comboBox(id:'patents', items:patArray, constraints:gbc(
gridx:1,
gridy:4,
anchor:LINE_START))
label(text:"Select patent repository", constraints:gbc(
gridx:0,
gridy:5,
insets:[0,0,10,0],
anchor:LINE_END))
comboBox(id:'patentLoc', items:['-', 'EP Patent Register', 'PatentScope (WIPO)', 'PatentLens'], constraints:gbc(
gridx:1,
gridy:5,
insets:[0,0,10,0],
anchor:LINE_START))
button(id:'search', label:"Search Patent/Location Combo", constraints:gbc(
gridx:0,
gridy:6,
insets:[0,0,10,0],
anchor:LINE_END),
actionPerformed: {
vars.buttonResult = 'search'
dispose()})
button(id:'cancel', label:"Cancel", constraints:gbc(
gridx:1,
gridy:6,
anchor:LINE_START,
insets:[0,0,10,0]),
actionPerformed: {
vars.buttonResult = 'cancel'
dispose()})
label(text:"---", constraints:gbc(
gridy:7,
gridwidth:2))
label(text:"Some patent sites block external programs, or are not used often.", constraints:gbc(
gridy:8,
gridwidth:2,
insets:[10,0,0,0]))
label(text:"Jump to the country specific patent websites using the menu below.", constraints:gbc(
gridy:9,
gridwidth:2,
insets:[0,0,10,0]))
comboBox(id:'othersites', items:['-', 'JP: IDPL', 'CA: CIPO', 'AU: AusPat', 'KR: Korea', 'HK: PatentSearch', 'TW: Taiwan IPO', 'SG: IPOS', 'DE: DPMA', 'RU: FIPS', 'ID: IPDL'], constraints:gbc(
gridx:0,
gridy:10,
insets:[0,0,10,0],
anchor:LINE_END))
button(id:'otherok', label:"Go To Site", constraints:gbc(
gridx:1,
gridy:10,
insets:[0,0,10,0],
anchor:LINE_START),
actionPerformed: {
vars.buttonResult = 'otherok'
dispose()})
}
}
dial.pack()
dial.setLocationRelativeTo(null)
dial.show()
chosenAction = vars.buttonResult
switch (chosenAction) {
case "cancel":
return
break
case "lead":
def temp = LEAD
GOTOURL = temp
break
case "search":
def patentWebsite = vars.patentLoc.selectedItem
def patentTrimmed = vars.patents.selectedItem
switch (patentWebsite) {
case "EP Patent Register":
GOTOURL = "http://worldwide.espacenet.com/searchResults?DB=EPODOC&submitted=true&locale=en_EP&ST=singleline&compact=false&DB=EPODOC&query=" + patentTrimmed
break
case "PatentScope (WIPO)":
GOTOURL = "http://www.wipo.int/patentscope/search/en/detail.jsf?docId=" + patentTrimmed
break
case "PatentLens":
GOTOURL = "http://www.patentlens.net/patentlens/patents.html?patnums=" + patentTrimmed + "&returnTo=patentnumber.html" + patentTrimmed
break
}
break
case "otherok":
goToLoc = vars.othersites.selectedItem
switch (goToLoc) {
case "JP: IDPL":
GOTOURL = "http://www.ipdl.inpit.go.jp/homepg_e.ipdl"
break
case "CA: CIPO":
GOTOURL = "http://brevets-patents.ic.gc.ca/opic-cipo/cpd/eng/introduction.html"
break
case "AU: AusPat":
GOTOURL = "http://www.ipaustralia.gov.au/auspat/index.htm"
break
case "KR: Korea":
GOTOURL = "http://patent2.kipris.or.kr/pateng/searchLogina.do?next=GeneralSearch"
break
case "HK: PatentSearch":
GOTOURL = "http://ipsearch.ipd.gov.hk/patent/main.jsp?LANG=en"
break
case "TW: Taiwan IPO":
GOTOURL = "http://www.tipo.gov.tw/en/index.aspx"
break
case "SG: IPOS":
GOTOURL = "http://www.epatents.gov.sg/default_redirect.asp"
break
case "DE: DPMA":
GOTOURL = "http://register.dpma.de/DPMAregister/Uebersicht"
break
case "RU: FIPS":
GOTOURL = "http://www1.fips.ru/wps/wcm/connect/content_en/en/main+/"
break
case "ID: IPDL":
GOTOURL = "http://ipdl.dgip.go.id"
break
}
break
}
URI testUrl = new URI(GOTOURL)
Desktop desktop = Desktop.getDesktop()
desktop.browse(testUrl)
}