Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
floodlight
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
croft1
floodlight
Commits
20127396
Commit
20127396
authored
12 years ago
by
kwanggithub
Browse files
Options
Downloads
Patches
Plain Diff
fix tabs
parent
71e8403e
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/main/java/org/openflow/util/IProducer.java
+3
-2
3 additions, 2 deletions
src/main/java/org/openflow/util/IProducer.java
src/main/java/org/openflow/util/ProducerConsumer.java
+210
-204
210 additions, 204 deletions
src/main/java/org/openflow/util/ProducerConsumer.java
with
213 additions
and
206 deletions
src/main/java/org/openflow/util/IProducer.java
+
3
−
2
View file @
20127396
...
...
@@ -2,7 +2,8 @@ package org.openflow.util;
public
interface
IProducer
{
public
void
registerConsumer
(
Class
<?>
iface
,
Object
anObj
);
public
void
deregisterConsumer
(
Class
<?>
iface
,
Object
anObj
);
public
void
registerConsumer
(
Class
<?>
iface
,
Object
anObj
);
public
void
deregisterConsumer
(
Class
<?>
iface
,
Object
anObj
);
}
This diff is collapsed.
Click to expand it.
src/main/java/org/openflow/util/ProducerConsumer.java
+
210
−
204
View file @
20127396
...
...
@@ -5,213 +5,219 @@ import java.util.Hashtable;
import
java.util.Map
;
import
java.util.Set
;
/**
* The following implement a producer/consumer design pattern in which
* both producers and consumers explicitly employ a centralized
* registration mechanism, and java Interfaces are used as contracts.<br>
*
* The following implement a producer/consumer design pattern in which both
* producers and consumers explicitly employ a centralized registration
* mechanism, and java Interfaces are used as contracts.<br>
*/
public
class
ProducerConsumer
{
/*
* Class variables
*/
protected
static
ProducerConsumer
singleton
;
/*
* Default constructor
*/
protected
ProducerConsumer
()
{
producerMap
=
new
Hashtable
<
Class
<?>,
Set
<
IProducer
>>
();
}
/*
* Instance variables
*/
// Interface/IProducer map
protected
Map
<
Class
<?>,
Set
<
IProducer
>>
producerMap
;
/*
* Protected methods
*/
protected
void
_registerConsumer
(
Object
consumer
,
Class
<?>
[]
interfaces
,
Set
<
Class
<?>>
iSet
,
Set
<
Class
<?>>
iUniqueSet
)
{
//*...Process all interfaces...*/
for
(
Class
<?>
iface:
interfaces
)
{
//*...Protect against repeated interfaces...*/
if
(!
iUniqueSet
.
contains
(
iface
))
{
iUniqueSet
.
add
(
iface
);
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
!=
null
)
{
for
(
IProducer
producer:
producers
)
producer
.
registerConsumer
(
iface
,
consumer
);
iSet
.
add
(
iface
);
}
//*...Recurse...*/
_registerConsumer
(
consumer
,
iface
.
getInterfaces
(),
iSet
,
iUniqueSet
);
}
}
}
protected
void
_registerConsumer
(
Object
consumer
,
Class
<?>
clazz
,
Set
<
Class
<?>>
iSet
,
Set
<
Class
<?>>
iUniqueSet
)
{
if
(
clazz
!=
null
)
{
//*...Process all interfaces...*/
_registerConsumer
(
consumer
,
clazz
.
getInterfaces
(),
iSet
,
iUniqueSet
);
//*...Recurse the class hierarchy...*/
_registerConsumer
(
consumer
,
clazz
.
getSuperclass
(),
iSet
,
iUniqueSet
);
}
}
protected
int
_deregisterConsumer
(
Object
consumer
,
Class
<?>
[]
interfaces
,
Set
<
Class
<?>>
iUniqueSet
)
{
int
count
=
0
;
//*...Process all interfaces...*/
for
(
Class
<?>
iface:
interfaces
)
{
//*...Protect against repeated interfaces...*/
if
(!
iUniqueSet
.
contains
(
iface
))
{
iUniqueSet
.
add
(
iface
);
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
!=
null
)
{
for
(
IProducer
producer:
producers
)
producer
.
deregisterConsumer
(
iface
,
consumer
);
count
++;
}
//*...Recurse...*/
count
+=
_deregisterConsumer
(
consumer
,
iface
.
getInterfaces
(),
iUniqueSet
);
}
}
return
count
;
}
protected
int
_deregisterConsumer
(
Object
consumer
,
Class
<?>
clazz
,
Set
<
Class
<?>>
iUniqueSet
)
{
int
count
=
0
;
if
(
clazz
!=
null
)
{
//*...Process all interfaces...*/
count
+=
_deregisterConsumer
(
consumer
,
clazz
.
getInterfaces
(),
iUniqueSet
);
//*...Recurse the class hierarchy...*/
count
+=
_deregisterConsumer
(
consumer
,
clazz
.
getSuperclass
(),
iUniqueSet
);
}
return
count
;
}
/*
* Singleton API
*/
/**
* @return singleton ProducerConsumer
*/
public
static
synchronized
ProducerConsumer
getSingleton
()
{
if
(
singleton
==
null
)
singleton
=
new
ProducerConsumer
();
return
singleton
;
}
/*
* Producer APIs
*/
/**
* Producer registration
*
* @param producer object that implements IProducer
* @param iface interface supported by the producer
* @return whether there was a previously registered producer,
* or true if one or more the arguments were invalid
*/
public
boolean
registerProducer
(
IProducer
producer
,
Class
<?>
iface
)
{
if
(
producer
!=
null
&&
iface
!=
null
&&
iface
.
isInterface
())
{
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
==
null
)
{
producers
=
new
HashSet
<
IProducer
>
();
producerMap
.
put
(
iface
,
producers
);
}
return
producers
.
add
(
producer
);
}
else
return
true
;
}
/**
* Producer deregistration
*
* @param producer object that implements IProducer
* @param iface interface supported by the producer
* @return whether the interface/producer pair was removed,
* or false if one or more the arguments were invalid
*/
public
boolean
deregisterProducer
(
IProducer
producer
,
Class
<?>
iface
)
{
if
(
producer
!=
null
&&
iface
!=
null
&&
iface
.
isInterface
())
{
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
!=
null
)
return
producers
.
remove
(
producer
);
}
return
false
;
}
/*
* Consumer APIs
*/
/**
* Consumer registration
*
* @param consumer object that implements producer-specific interfaces
* @return set of supported interfaces
*/
public
Set
<
Class
<?>>
registerConsumer
(
Object
consumer
)
{
Set
<
Class
<?>>
iSet
=
new
HashSet
<
Class
<?>>
();
if
(
consumer
!=
null
)
_registerConsumer
(
consumer
,
consumer
.
getClass
(),
iSet
,
new
HashSet
<
Class
<?>>
());
return
iSet
;
}
/**
* Consumer deregistration
*
* @param consumer object to deregister
* @return number of unregistered interfaces
*/
public
int
deregisterConsumer
(
Object
consumer
)
{
if
(
consumer
!=
null
)
return
_deregisterConsumer
(
consumer
,
consumer
.
getClass
(),
new
HashSet
<
Class
<?>>
());
else
return
0
;
}
/*
* Class variables
*/
protected
static
ProducerConsumer
singleton
;
/*
* Default constructor
*/
protected
ProducerConsumer
()
{
producerMap
=
new
Hashtable
<
Class
<?>,
Set
<
IProducer
>>();
}
/*
* Instance variables
*/
// Interface/IProducer map
protected
Map
<
Class
<?>,
Set
<
IProducer
>>
producerMap
;
/*
* Protected methods
*/
protected
void
_registerConsumer
(
Object
consumer
,
Class
<?>[]
interfaces
,
Set
<
Class
<?>>
iSet
,
Set
<
Class
<?>>
iUniqueSet
)
{
// *...Process all interfaces...*/
for
(
Class
<?>
iface
:
interfaces
)
{
// *...Protect against repeated interfaces...*/
if
(!
iUniqueSet
.
contains
(
iface
))
{
iUniqueSet
.
add
(
iface
);
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
!=
null
)
{
for
(
IProducer
producer
:
producers
)
producer
.
registerConsumer
(
iface
,
consumer
);
iSet
.
add
(
iface
);
}
// *...Recurse...*/
_registerConsumer
(
consumer
,
iface
.
getInterfaces
(),
iSet
,
iUniqueSet
);
}
}
}
protected
void
_registerConsumer
(
Object
consumer
,
Class
<?>
clazz
,
Set
<
Class
<?>>
iSet
,
Set
<
Class
<?>>
iUniqueSet
)
{
if
(
clazz
!=
null
)
{
// *...Process all interfaces...*/
_registerConsumer
(
consumer
,
clazz
.
getInterfaces
(),
iSet
,
iUniqueSet
);
// *...Recurse the class hierarchy...*/
_registerConsumer
(
consumer
,
clazz
.
getSuperclass
(),
iSet
,
iUniqueSet
);
}
}
protected
int
_deregisterConsumer
(
Object
consumer
,
Class
<?>[]
interfaces
,
Set
<
Class
<?>>
iUniqueSet
)
{
int
count
=
0
;
// *...Process all interfaces...*/
for
(
Class
<?>
iface
:
interfaces
)
{
// *...Protect against repeated interfaces...*/
if
(!
iUniqueSet
.
contains
(
iface
))
{
iUniqueSet
.
add
(
iface
);
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
!=
null
)
{
for
(
IProducer
producer
:
producers
)
producer
.
deregisterConsumer
(
iface
,
consumer
);
count
++;
}
// *...Recurse...*/
count
+=
_deregisterConsumer
(
consumer
,
iface
.
getInterfaces
(),
iUniqueSet
);
}
}
return
count
;
}
protected
int
_deregisterConsumer
(
Object
consumer
,
Class
<?>
clazz
,
Set
<
Class
<?>>
iUniqueSet
)
{
int
count
=
0
;
if
(
clazz
!=
null
)
{
// *...Process all interfaces...*/
count
+=
_deregisterConsumer
(
consumer
,
clazz
.
getInterfaces
(),
iUniqueSet
);
// *...Recurse the class hierarchy...*/
count
+=
_deregisterConsumer
(
consumer
,
clazz
.
getSuperclass
(),
iUniqueSet
);
}
return
count
;
}
/*
* Singleton API
*/
/**
* @return singleton ProducerConsumer
*/
public
static
synchronized
ProducerConsumer
getSingleton
()
{
if
(
singleton
==
null
)
singleton
=
new
ProducerConsumer
();
return
singleton
;
}
/*
* Producer APIs
*/
/**
* Producer registration
*
* @param producer
* object that implements IProducer
* @param iface
* interface supported by the producer
* @return whether there was a previously registered producer, or true if
* one or more the arguments were invalid
*/
public
boolean
registerProducer
(
IProducer
producer
,
Class
<?>
iface
)
{
if
(
producer
!=
null
&&
iface
!=
null
&&
iface
.
isInterface
())
{
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
==
null
)
{
producers
=
new
HashSet
<
IProducer
>();
producerMap
.
put
(
iface
,
producers
);
}
return
producers
.
add
(
producer
);
}
else
return
true
;
}
/**
* Producer deregistration
*
* @param producer
* object that implements IProducer
* @param iface
* interface supported by the producer
* @return whether the interface/producer pair was removed, or false if one
* or more the arguments were invalid
*/
public
boolean
deregisterProducer
(
IProducer
producer
,
Class
<?>
iface
)
{
if
(
producer
!=
null
&&
iface
!=
null
&&
iface
.
isInterface
())
{
Set
<
IProducer
>
producers
=
producerMap
.
get
(
iface
);
if
(
producers
!=
null
)
return
producers
.
remove
(
producer
);
}
return
false
;
}
/*
* Consumer APIs
*/
/**
* Consumer registration
*
* @param consumer
* object that implements producer-specific interfaces
* @return set of supported interfaces
*/
public
Set
<
Class
<?>>
registerConsumer
(
Object
consumer
)
{
Set
<
Class
<?>>
iSet
=
new
HashSet
<
Class
<?>>();
if
(
consumer
!=
null
)
_registerConsumer
(
consumer
,
consumer
.
getClass
(),
iSet
,
new
HashSet
<
Class
<?>>());
return
iSet
;
}
/**
* Consumer deregistration
*
* @param consumer
* object to deregister
* @return number of unregistered interfaces
*/
public
int
deregisterConsumer
(
Object
consumer
)
{
if
(
consumer
!=
null
)
return
_deregisterConsumer
(
consumer
,
consumer
.
getClass
(),
new
HashSet
<
Class
<?>>());
else
return
0
;
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment