Toggle navigation
Toggle navigation
This project
Loading...
Sign in
홍길동
/
onos
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
Brian O'Connor
2015-02-05 11:40:51 -0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
055fb975c9ceafb29a906ab52c97c9aeea572a0c
055fb975
1 parent
0e271dc6
Adding Key class for intents
Change-Id: Ib6e586bcc938e062de0b1d6c92e3b885334a4769
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
130 additions
and
0 deletions
core/api/src/main/java/org/onosproject/net/intent/Key.java
core/api/src/main/java/org/onosproject/net/intent/Key.java
0 → 100644
View file @
055fb97
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
onosproject
.
net
.
intent
;
import
com.google.common.hash.HashFunction
;
import
com.google.common.hash.Hashing
;
import
org.onosproject.core.ApplicationId
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Objects
;
/**
* Key class for Intents.
*/
// TODO maybe pull this up to utils
// TODO need to make this classes kryo serializable
public
class
Key
{
private
final
long
hash
;
private
static
final
HashFunction
HASH_FN
=
Hashing
.
md5
();
private
Key
(
long
hash
)
{
this
.
hash
=
hash
;
}
public
long
hash
()
{
return
hash
;
}
public
static
Key
of
(
String
key
,
ApplicationId
appId
)
{
return
new
StringKey
(
key
,
appId
);
}
public
static
Key
of
(
long
key
,
ApplicationId
appId
)
{
return
new
LongKey
(
key
,
appId
);
}
private
final
static
class
StringKey
extends
Key
{
private
final
ApplicationId
appId
;
private
final
String
key
;
private
StringKey
(
String
key
,
ApplicationId
appId
)
{
super
(
HASH_FN
.
newHasher
()
.
putShort
(
appId
.
id
())
.
putString
(
key
,
StandardCharsets
.
UTF_8
)
.
hash
().
asLong
());
this
.
key
=
key
;
this
.
appId
=
appId
;
}
@Override
public
String
toString
()
{
return
key
;
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
key
);
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
{
return
true
;
}
if
(
obj
==
null
||
getClass
()
!=
obj
.
getClass
())
{
return
false
;
}
final
StringKey
other
=
(
StringKey
)
obj
;
return
this
.
hash
()
==
other
.
hash
()
&&
Objects
.
equals
(
this
.
appId
,
other
.
appId
)
&&
Objects
.
equals
(
this
.
key
,
other
.
key
);
}
}
private
final
static
class
LongKey
extends
Key
{
private
final
ApplicationId
appId
;
private
static
long
key
;
private
LongKey
(
long
key
,
ApplicationId
appId
)
{
super
(
HASH_FN
.
newHasher
()
.
putShort
(
appId
.
id
())
.
putLong
(
key
)
.
hash
().
asLong
());
this
.
key
=
key
;
this
.
appId
=
appId
;
}
@Override
public
String
toString
()
{
return
Long
.
toString
(
key
);
}
@Override
public
int
hashCode
()
{
return
Objects
.
hash
(
key
);
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
{
return
true
;
}
if
(
obj
==
null
||
getClass
()
!=
obj
.
getClass
())
{
return
false
;
}
final
LongKey
other
=
(
LongKey
)
obj
;
return
Objects
.
equals
(
this
.
appId
,
other
.
appId
)
&&
this
.
key
==
other
.
key
;
}
}
}
Please
register
or
login
to post a comment