Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Joe Wolf: USPTO
1. United States Patent & Trademark Office!
!
America Invents Act!
and Alfresco!
!
Presented by
!
Joe Wolf!
Software Developer, USPTO OCIO!
!
!
!
March 5, 2013!
2. The Disclaimer!
• Views expressed in this presentation are my
own and not necessarily representative of the
views of the U.S. Patent & Trademark Office
or Department of Commerce.!
• Discussions regarding specific software
products or vendors do not constitute an
endorsement of said products or vendors by
the U.S. Patent & Trademark Office or
Department of Commerce.!
3. The Law!
• Leahy-Smith “America Invents Act” (AIA)!
• Signed September 15th, 2011!
• Introduces significant reforms!
– USPTO granted fee setting authority!
– No more Tax Code compliance strategy
patents!
– First to Invent à First Inventor to File!
– Expanded Post-Grant procedures and
reviews!
– And more!!
4. The Requirements!
• Support filing of AIA Petitions!
– Inter Partes Review!
– Transition program for Covered Business Methods!
– Post-Grant Review !
• Collect documents!
– Papers & Exhibits!
– Public, private, or confidential visibility!
• Collect payments!
• Support PTAB workflow, email notifications!
• Provide public access to documents!
!
5. The Architecture!
Petitioners, Public
COTS Case Management
Product!
! Alfresco 4.0
• Support Petitions Workflow! CMIS!
Enterprise!
• Send Notifications! !
• Collect Payments! • Persist Documents!
• Persist Case Metadata!
• Provide Public Search!
USPTO Personnel
5!
6. The Constraints!
• Congressionally-mandated deadline!
• First production system to use Alfresco and Case
Management COTS Product!
• Case Management COTS Product limitations!
– Only supported CMIS!
– Handled user registration and authentication!
– Closed architecture!
6!
7. The Strategies!
• CMIS Only!
– Single, top-level “DropZone” for Case creation!
!
Cases/DropZone/ Cases/2013/PGR/00/
createFolder PGR2013- OnCreateNodePolicy PGR2013-
00001 00001
1. Validate uniqueness
of CaseID
2. Move folder
3. Track CaseID in
attributeService
4. Create case sub-
folders with ACLs
7!
8. The Strategies!
• CMIS Only!
– Case-specific Drop Zones for filing documents!
PGR2013-00001/Record/
PGR2013-00001/ Exhibit/Petitioner
cases:exhibit cases:exhibit
createDoc OnCreateNodePolicy
cases:filingParty= cmis:name=
petitioner Exhibit1001.pdf
cases:exhibitNo= 1. Move to appropriate cases:caseId=
1001 subfolder/rename PGR2013-00001
2. Apply caseId aspect
3. Apply ACLs based
on visibility, if
necessary
8!
9. The Strategies!
• Externalized User Registration/Authentication!
– Trusted connection between Case Management
Product and Alfresco!
<servlet>
<servlet-‐name>cmisprps</servlet-‐name>
<servlet-‐class>
org.apache.chemistry.opencmis.server.impl.atompub.CmisAtomPubServlet
</servlet-‐class>
<init-‐param>
<param-‐name>callContextHandler</param-‐name>
<param-‐value>
gov.uspto.prps.AutoAuthCallContextHandler
</param-‐value>
</init-‐param>
<load-‐on-‐startup>8</load-‐on-‐startup>
</servlet>
9!
10. The Strategies!
• Externalized User Registration/Authentication!
– Alfresco users created on demand!
public
Map<String,
String>
getCallContextMap(HttpServletRequest
request)
{
//
...extract
username
from
HTTP
request
String
ticket
=
ticketComponent.getCurrentTicket(username,
true);
AuthenticationUtil.runAs(new
RunAsWork<NodeRef>()
{
@Override
public
NodeRef
doWork()
throws
Exception
{
return
personService.getPerson(username);
//
call
has
side-‐effect!
}
},
AuthenticationUtil.getSystemUserName());
Map<String,
String>
context
=
new
HashMap<String,
String>();
context.put(CallContext.USERNAME,
"");
context.put(CallContext.PASSWORD,
ticket);
return
context;
}
10!
11. The Strategies!
• Externalized User Registration/Authentication!
– Dynamic group assignments based on
metadata provided in CMIS call!
//
during
execution
of
onCreateNode
policy
for
documents...
String
user
=
AuthenticationUtil.getFullyAuthenticatedUser();
String
group
=
groupName(caseId,
filingParty);
//
hides
PermissionService.GROUP_PREFIX
weirdness
Set<String>
groupMembers
=
authorityService
.getContainedAuthorities(AuthorityType.USER,
group,
true);
if
(groupMembers
==
null
||
!groupMembers.contains(user))
{
authorityService.addAuthority(group,
user);
}
11!
12. The Strategies!
• Closed Architecture!
– Folder structure reflects business view!
– Content model holds key metadata!
– Use CMIS!
• Expunging!
• Reporting!
• Auditing!
• Multi-document PDF generation!
12!
13. The Wish List!
• Generate code from content model XML!
– e.g. XJC (JAXB), wsdl2java, hbm2java!
• Support Webscripts written in any JSR 223-
compliant language!
• CRUD in CMIS Query Language!
• Apache Chemistry to go 1.0!
• Servlet 3.0/JavaEE 6 support or URL dispatching
via Spring Web!
13!