mirror of
https://github.com/corda/corda.git
synced 2024-12-20 21:43:14 +00:00
Extracted a tool class to reduce duplicated logic between InMemoryIdentityService and PersistentIdentityService (#3141)
This commit is contained in:
parent
e1dc57ba9d
commit
b2e9a427a8
@ -0,0 +1,24 @@
|
|||||||
|
package net.corda.node.services.identity
|
||||||
|
|
||||||
|
import net.corda.core.identity.CordaX500Name
|
||||||
|
import net.corda.core.identity.Party
|
||||||
|
|
||||||
|
|
||||||
|
fun partiesFromName(query: String, exactMatch: Boolean, x500name: CordaX500Name, results: LinkedHashSet<Party>, party: Party) {
|
||||||
|
|
||||||
|
val components = listOfNotNull(x500name.commonName, x500name.organisationUnit, x500name.organisation, x500name.locality, x500name.state, x500name.country)
|
||||||
|
components.forEach { component ->
|
||||||
|
if (exactMatch && component == query) {
|
||||||
|
results += party
|
||||||
|
} else if (!exactMatch) {
|
||||||
|
// We can imagine this being a query over a lucene index in future.
|
||||||
|
//
|
||||||
|
// Kostas says: We can easily use the Jaro-Winkler distance metric as it is best suited for short
|
||||||
|
// strings such as entity/company names, and to detect small typos. We can also apply it for city
|
||||||
|
// or any keyword related search in lists of records (not raw text - for raw text we need indexing)
|
||||||
|
// and we can return results in hierarchical order (based on normalised String similarity 0.0-1.0).
|
||||||
|
if (component.contains(query, ignoreCase = true))
|
||||||
|
results += party
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -103,22 +103,7 @@ class InMemoryIdentityService(identities: Array<out PartyAndCertificate>,
|
|||||||
override fun partiesFromName(query: String, exactMatch: Boolean): Set<Party> {
|
override fun partiesFromName(query: String, exactMatch: Boolean): Set<Party> {
|
||||||
val results = LinkedHashSet<Party>()
|
val results = LinkedHashSet<Party>()
|
||||||
for ((x500name, partyAndCertificate) in principalToParties) {
|
for ((x500name, partyAndCertificate) in principalToParties) {
|
||||||
val party = partyAndCertificate.party
|
partiesFromName(query, exactMatch, x500name, results, partyAndCertificate.party)
|
||||||
val components = listOfNotNull(x500name.commonName, x500name.organisationUnit, x500name.organisation, x500name.locality, x500name.state, x500name.country)
|
|
||||||
components.forEach { component ->
|
|
||||||
if (exactMatch && component == query) {
|
|
||||||
results += party
|
|
||||||
} else if (!exactMatch) {
|
|
||||||
// We can imagine this being a query over a lucene index in future.
|
|
||||||
//
|
|
||||||
// Kostas says: We can easily use the Jaro-Winkler distance metric as it is best suited for short
|
|
||||||
// strings such as entity/company names, and to detect small typos. We can also apply it for city
|
|
||||||
// or any keyword related search in lists of records (not raw text - for raw text we need indexing)
|
|
||||||
// and we can return results in hierarchical order (based on normalised String similarity 0.0-1.0).
|
|
||||||
if (component.contains(query, ignoreCase = true))
|
|
||||||
results += party
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
@ -180,22 +180,7 @@ class PersistentIdentityService(override val trustRoot: X509Certificate,
|
|||||||
override fun partiesFromName(query: String, exactMatch: Boolean): Set<Party> {
|
override fun partiesFromName(query: String, exactMatch: Boolean): Set<Party> {
|
||||||
val results = LinkedHashSet<Party>()
|
val results = LinkedHashSet<Party>()
|
||||||
for ((x500name, partyId) in principalToParties.allPersisted()) {
|
for ((x500name, partyId) in principalToParties.allPersisted()) {
|
||||||
val party = keyToParties[partyId]!!.party
|
partiesFromName(query, exactMatch, x500name, results, keyToParties[partyId]!!.party)
|
||||||
val components = listOfNotNull(x500name.commonName, x500name.organisationUnit, x500name.organisation, x500name.locality, x500name.state, x500name.country)
|
|
||||||
components.forEach { component ->
|
|
||||||
if (exactMatch && component == query) {
|
|
||||||
results += party
|
|
||||||
} else if (!exactMatch) {
|
|
||||||
// We can imagine this being a query over a lucene index in future.
|
|
||||||
//
|
|
||||||
// Kostas says: We can easily use the Jaro-Winkler distance metric as it is best suited for short
|
|
||||||
// strings such as entity/company names, and to detect small typos. We can also apply it for city
|
|
||||||
// or any keyword related search in lists of records (not raw text - for raw text we need indexing)
|
|
||||||
// and we can return results in hierarchical order (based on normalised String similarity 0.0-1.0).
|
|
||||||
if (component.contains(query, ignoreCase = true))
|
|
||||||
results += party
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user