Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
sfp-plus-i2c
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
9
Issues
9
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
sfp-plus-i2c
Commits
bac6db72
Commit
bac6db72
authored
Apr 18, 2017
by
Vincent van Beveren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
completed clone tool
removed print stuff
parent
c795c870
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
929 additions
and
74 deletions
+929
-74
MultiSFPDevice.java
sw/jsfp/src/nl/nikhef/sfp/MultiSFPDevice.java
+1
-1
MultiSFPProvider.java
sw/jsfp/src/nl/nikhef/sfp/MultiSFPProvider.java
+1
-1
DDMIElement.java
sw/jsfp/src/nl/nikhef/sfp/ddmi/DDMIElement.java
+30
-1
DDMIMeta.java
sw/jsfp/src/nl/nikhef/sfp/ddmi/DDMIMeta.java
+1
-1
DDMIValue.java
sw/jsfp/src/nl/nikhef/sfp/ddmi/DDMIValue.java
+1
-0
DataSource.java
sw/jsfp/src/nl/nikhef/sfp/ddmi/DataSource.java
+1
-1
I2CDataSource.java
sw/jsfp/src/nl/nikhef/sfp/ddmi/I2CDataSource.java
+1
-1
nikhef-tools.jar
sw/nikhef-tools/nikhef-tools.jar
+0
-0
Utils.java
sw/nikhef-tools/src/nl/nikhef/tools/Utils.java
+23
-2
FTDevice.java
sw/rebus/src/com/ftdi/FTDevice.java
+3
-3
PCA9848.java
sw/rebus/src/nl/nikhef/rebus/dev/PCA9848.java
+1
-1
JavaFTD2xxMPSSE.java
sw/rebus/src/nl/nikhef/rebus/ftdi/JavaFTD2xxMPSSE.java
+4
-4
build.xml
sw/safaripark/build.xml
+3
-0
safaripark-master-v0.1-71.zip
sw/safaripark/safaripark-master-v0.1-71.zip
+0
-0
ActiveLogArea.java
sw/safaripark/src/nl/nikhef/safaripark/ActiveLogArea.java
+0
-2
ModuleManager.java
sw/safaripark/src/nl/nikhef/safaripark/ModuleManager.java
+2
-2
SaFariPark.java
sw/safaripark/src/nl/nikhef/safaripark/SaFariPark.java
+10
-1
StatusBar.java
sw/safaripark/src/nl/nikhef/safaripark/StatusBar.java
+51
-0
DollyModel.java
sw/safaripark/src/nl/nikhef/safaripark/dolly/DollyModel.java
+184
-10
DollyPanel.java
sw/safaripark/src/nl/nikhef/safaripark/dolly/DollyPanel.java
+166
-23
FileValueGetter.java
...ipark/src/nl/nikhef/safaripark/dolly/FileValueGetter.java
+40
-0
FileValueSetter.java
...ipark/src/nl/nikhef/safaripark/dolly/FileValueSetter.java
+44
-0
ModuleValueGetter.java
...ark/src/nl/nikhef/safaripark/dolly/ModuleValueGetter.java
+25
-0
ModuleValueSetter.java
...ark/src/nl/nikhef/safaripark/dolly/ModuleValueSetter.java
+36
-0
ValueGetter.java
...afaripark/src/nl/nikhef/safaripark/dolly/ValueGetter.java
+11
-0
ValueSetter.java
...afaripark/src/nl/nikhef/safaripark/dolly/ValueSetter.java
+13
-0
CheckableList.java
...aripark/src/nl/nikhef/safaripark/extra/CheckableList.java
+179
-0
Module.java
sw/safaripark/src/nl/nikhef/safaripark/extra/Module.java
+30
-0
MonitorModel.java
...ripark/src/nl/nikhef/safaripark/monitor/MonitorModel.java
+10
-14
CheckableTreeNode.java
...ipark/src/nl/nikhef/safaripark/vsp/CheckableTreeNode.java
+10
-2
ValueSelectionPane.java
...park/src/nl/nikhef/safaripark/vsp/ValueSelectionPane.java
+48
-4
No files found.
sw/jsfp/src/nl/nikhef/sfp/MultiSFPDevice.java
View file @
bac6db72
...
...
@@ -151,7 +151,7 @@ public class MultiSFPDevice extends SFPDeviceBase {
_modulePresentMask
=
nowPresent
;
System
.
out
.
printf
(
"Present: %02x\n"
,
_modulePresentMask
);
//
System.out.printf("Present: %02x\n", _modulePresentMask);
if
(
changes
!=
0
)
{
for
(
int
i
=
0
;
i
<
NO_OF_BAYS
;
++
i
)
...
...
sw/jsfp/src/nl/nikhef/sfp/MultiSFPProvider.java
View file @
bac6db72
...
...
@@ -29,7 +29,7 @@ public class MultiSFPProvider extends SFPProviderBase
{
devs
=
FTDevice
.
getDevices
(
true
);
System
.
out
.
printf
(
"FTDevice.getDevices() Found %d devices\n"
,
devs
.
size
());
//
System.out.printf("FTDevice.getDevices() Found %d devices\n", devs.size());
}
for
(
FTDevice
devRaw
:
devs
)
...
...
sw/jsfp/src/nl/nikhef/sfp/ddmi/DDMIElement.java
View file @
bac6db72
...
...
@@ -9,8 +9,10 @@ public abstract class DDMIElement {
private
String
_id
;
private
String
_condition
;
private
String
_name
;
private
String
_qName
;
private
DDMIElement
_parent
;
private
String
_sourceId
;
...
...
@@ -75,7 +77,7 @@ public abstract class DDMIElement {
sb
.
append
(
Character
.
toLowerCase
(
c
));
}
}
System
.
out
.
println
(
"Created name "
+
sb
.
toString
());
//
System.out.println("Created name " + sb.toString());
_name
=
sb
.
toString
();
}
...
...
@@ -151,6 +153,33 @@ public abstract class DDMIElement {
return
true
;
}
public
String
getQualifiedName
()
{
if
(
_qName
==
null
)
{
makeQName
();
}
return
_qName
;
}
private
void
makeQName
()
{
if
(
_parent
!=
null
)
{
_qName
=
_parent
.
getQualifiedName
();
}
else
{
_qName
=
null
;
}
if
(
_qName
==
null
)
{
_qName
=
getName
();
}
else
if
(
getName
()
!=
null
)
{
_qName
=
_qName
+
"."
+
getName
();
}
}
}
sw/jsfp/src/nl/nikhef/sfp/ddmi/DDMIMeta.java
View file @
bac6db72
...
...
@@ -51,7 +51,7 @@ public class DDMIMeta<T extends Object> {
private
float
_offset
=
0
;
public
Conversion
()
{
System
.
out
.
println
(
"Conversion created, no args"
);
//
System.out.println("Conversion created, no args");
}
public
void
setScaling
(
float
scale
,
float
offset
)
...
...
sw/jsfp/src/nl/nikhef/sfp/ddmi/DDMIValue.java
View file @
bac6db72
...
...
@@ -205,6 +205,7 @@ public class DDMIValue extends DDMIElement {
}
}
...
...
sw/jsfp/src/nl/nikhef/sfp/ddmi/DataSource.java
View file @
bac6db72
...
...
@@ -95,7 +95,7 @@ public abstract class DataSource {
if
(
nLen
%
8
!=
0
)
{
nLen
=
nLen
+
(
8
-
(
nLen
%
8
));
}
System
.
out
.
printf
(
"Rescaling write, old-off=%d new-off=%d old-len=%d new-len=%d\n"
,
off
,
nOff
,
data
.
length
,
nLen
);
//
System.out.printf("Rescaling write, old-off=%d new-off=%d old-len=%d new-len=%d\n", off, nOff, data.length, nLen);
byte
[]
newData
=
read
(
ctx
,
nOff
,
nLen
);
System
.
arraycopy
(
data
,
0
,
newData
,
err
,
data
.
length
);
...
...
sw/jsfp/src/nl/nikhef/sfp/ddmi/I2CDataSource.java
View file @
bac6db72
...
...
@@ -24,7 +24,7 @@ public class I2CDataSource extends DataSource {
if
(
i2c
==
null
)
return
new
byte
[
len
];
System
.
out
.
printf
(
"Read media %02x, off=%d, len=%d\n"
,
_addr
,
off
,
len
);
//
System.out.printf("Read media %02x, off=%d, len=%d\n", _addr, off, len);
byte
[]
offData
=
new
byte
[]
{
(
byte
)
off
};
try
{
...
...
sw/nikhef-tools/nikhef-tools.jar
View file @
bac6db72
No preview for this file type
sw/nikhef-tools/src/nl/nikhef/tools/Utils.java
View file @
bac6db72
...
...
@@ -202,7 +202,28 @@ public final class Utils {
}
}
final
protected
static
char
[]
hexArray
=
"0123456789ABCDEF"
.
toCharArray
();
public
static
String
bytesToHexString
(
byte
[]
bytes
)
{
char
[]
hexChars
=
new
char
[
bytes
.
length
*
2
];
for
(
int
j
=
0
;
j
<
bytes
.
length
;
j
++
)
{
int
v
=
bytes
[
j
]
&
0xFF
;
hexChars
[
j
*
2
]
=
hexArray
[
v
>>>
4
];
hexChars
[
j
*
2
+
1
]
=
hexArray
[
v
&
0x0F
];
}
return
new
String
(
hexChars
);
}
public
static
byte
[]
hexStringToBytes
(
String
s
)
{
int
len
=
s
.
length
();
if
((
len
&
1
)
!=
0
)
return
null
;
byte
[]
data
=
new
byte
[
len
/
2
];
for
(
int
i
=
0
;
i
<
len
;
i
+=
2
)
{
data
[
i
/
2
]
=
(
byte
)
((
Character
.
digit
(
s
.
charAt
(
i
),
16
)
<<
4
)
+
Character
.
digit
(
s
.
charAt
(
i
+
1
),
16
));
}
return
data
;
}
}
sw/rebus/src/com/ftdi/FTDevice.java
View file @
bac6db72
...
...
@@ -195,7 +195,7 @@ public class FTDevice {
}
Logger
.
getLogger
(
FTDevice
.
class
.
getName
()).
log
(
Level
.
INFO
,
Logger
.
getLogger
(
FTDevice
.
class
.
getName
()).
log
(
Level
.
FINE
,
"Found devs: {0} (All:{1})"
,
new
Object
[]{
devs
.
size
(),
devNum
.
getValue
()});
...
...
@@ -226,7 +226,7 @@ public class FTDevice {
}
Logger
.
getLogger
(
FTDevice
.
class
.
getName
()).
log
(
Level
.
INFO
,
Logger
.
getLogger
(
FTDevice
.
class
.
getName
()).
log
(
Level
.
FINE
,
"Found devs: {0} (All:{1})"
,
new
Object
[]{
devs
.
size
(),
devNum
.
getValue
()});
...
...
@@ -288,7 +288,7 @@ public class FTDevice {
}
Logger
.
getLogger
(
FTDevice
.
class
.
getName
()).
log
(
Level
.
INFO
,
Logger
.
getLogger
(
FTDevice
.
class
.
getName
()).
log
(
Level
.
FINE
,
"Found devs: {0} (All:{1})"
,
new
Object
[]{
devs
.
size
(),
devNum
.
getValue
()});
...
...
sw/rebus/src/nl/nikhef/rebus/dev/PCA9848.java
View file @
bac6db72
...
...
@@ -43,7 +43,7 @@ public class PCA9848 {
*/
public
void
setChannels
(
int
bitmask
)
throws
IOException
{
System
.
out
.
printf
(
"Select: %02x\n"
,
bitmask
);
//
System.out.printf("Select: %02x\n", bitmask);
_i2c
.
write
(
_addr
,
new
byte
[]
{
(
byte
)
bitmask
});
}
...
...
sw/rebus/src/nl/nikhef/rebus/ftdi/JavaFTD2xxMPSSE.java
View file @
bac6db72
...
...
@@ -25,7 +25,7 @@ public class JavaFTD2xxMPSSE extends MPSSE {
*/
public
JavaFTD2xxMPSSE
(
FTDevice
dev
)
throws
IOException
{
System
.
out
.
println
(
"JavaFTD2xxMPSEE created"
);
//
System.out.println("JavaFTD2xxMPSEE created");
ftdi
=
dev
;
ftdi
.
open
();
}
...
...
@@ -54,7 +54,7 @@ public class JavaFTD2xxMPSSE extends MPSSE {
try
{
q
=
ftdi
.
getQueueStatus
();
}
catch
(
FTD2XXException
e
)
{
System
.
out
.
printf
(
"Error, with FTDI handle, attempting to recover\n"
);
//
System.out.printf("Error, with FTDI handle, attempting to recover\n");
ftdi
.
open
();
switchMode
(
_pinDirs
);
}
...
...
@@ -82,14 +82,14 @@ public class JavaFTD2xxMPSSE extends MPSSE {
}
ftdi
.
purgeBuffer
(
true
,
true
);
System
.
out
.
println
(
"Error:"
+
sb
.
toString
());
//
System.out.println("Error:" + sb.toString());
throw
new
IOException
(
sb
.
toString
());
}
public
void
close
()
throws
FTD2XXException
{
System
.
out
.
println
(
"FTDI Close"
);
//
System.out.println("FTDI Close");
ftdi
.
close
();
}
...
...
sw/safaripark/build.xml
View file @
bac6db72
...
...
@@ -60,6 +60,9 @@
java -cp "rebus.jar;jna-4.3.0.jar;nikhef-tools.jar;luaj-jse-3.0.1.jar;jsfp.jar;safaripark.jar;miglayout-4.0-swing.jar" nl.nikhef.safaripark.SaFariPark
pause
</echo>
<zip
destfile=
"safaripark-${git.branch}-${git.tag}-${git.revision}.zip"
basedir=
"${dist}"
>
</zip>
</target>
<target
name=
"compile"
depends=
"jsfp"
>
...
...
sw/safaripark/safaripark-master-v0.1-71.zip
0 → 100644
View file @
bac6db72
File added
sw/safaripark/src/nl/nikhef/safaripark/ActiveLogArea.java
View file @
bac6db72
...
...
@@ -18,7 +18,6 @@ public class ActiveLogArea extends TextArea {
setEditable
(
false
);
Logger
gLogger
=
Logger
.
getLogger
(
""
);
System
.
out
.
println
(
gLogger
);
gLogger
.
addHandler
(
new
Handler
()
{
@Override
...
...
@@ -28,7 +27,6 @@ public class ActiveLogArea extends TextArea {
@Override
public
void
run
()
{
String
txt
=
String
.
format
(
"[%s] %s (%s)\n"
,
record
.
getLevel
(),
_format
.
formatMessage
(
record
),
record
.
getLoggerName
());
System
.
out
.
println
(
txt
);
append
(
txt
);
}
...
...
sw/safaripark/src/nl/nikhef/safaripark/ModuleManager.java
View file @
bac6db72
...
...
@@ -143,7 +143,7 @@ public class ModuleManager implements BaySelectionListener
for
(
DataSource
ds
:
orderedSources
)
{
if
(!
ds
.
isValid
(
_ctx
))
continue
;
System
.
out
.
println
(
"Exporting datasource "
+
ds
);
//
System.out.println("Exporting datasource " + ds);
try
{
...
...
@@ -173,7 +173,7 @@ public class ModuleManager implements BaySelectionListener
for
(
DataSource
ds
:
orderedSources
)
{
if
(!
ds
.
isValid
(
_ctx
))
continue
;
System
.
out
.
println
(
"Exporting datasource "
+
ds
);
//
System.out.println("Exporting datasource " + ds);
try
{
...
...
sw/safaripark/src/nl/nikhef/safaripark/SaFariPark.java
View file @
bac6db72
...
...
@@ -14,8 +14,10 @@ import java.io.InputStream;
import
java.util.Locale
;
import
java.util.Map.Entry
;
import
java.util.Properties
;
import
java.util.logging.Handler
;
import
java.util.logging.Level
;
import
java.util.logging.LogManager
;
import
java.util.logging.Logger
;
import
javax.imageio.ImageIO
;
import
javax.inject.Inject
;
...
...
@@ -127,7 +129,9 @@ public class SaFariPark extends JFrame implements BaySelectionListener, WindowLi
_status
=
new
StatusBar
();
_modMgr
=
new
ModuleManager
(
_saveBinary
,
_loader
,
_ctxCache
);
_devMgr
.
addDeviceSelectedListener
(
_modMgr
);
_dp
=
new
DollyPanel
(
_loader
,
new
DollyModel
());
DollyModel
dm
=
new
DollyModel
(
_ctxCache
);
_sfpManager
.
addSFPProviderListener
(
dm
);
_dp
=
new
DollyPanel
(
_loader
,
dm
);
makeToolbar
();
JSplitPane
split
=
new
JSplitPane
(
JSplitPane
.
HORIZONTAL_SPLIT
);
split
.
setDividerLocation
(
300
);
...
...
@@ -256,6 +260,11 @@ public class SaFariPark extends JFrame implements BaySelectionListener, WindowLi
LogManager
.
getLogManager
().
getLogger
(
""
).
setLevel
(
Level
.
INFO
);
Logger
globalLogger
=
Logger
.
getLogger
(
""
);
Handler
[]
handlers
=
globalLogger
.
getHandlers
();
for
(
Handler
handler
:
handlers
)
{
globalLogger
.
removeHandler
(
handler
);
}
if
(
args
.
length
==
2
&&
args
[
0
].
equals
(
"--setdpi"
)){
...
...
sw/safaripark/src/nl/nikhef/safaripark/StatusBar.java
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
;
import
java.awt.BorderLayout
;
import
java.util.logging.Handler
;
import
java.util.logging.Level
;
import
java.util.logging.LogRecord
;
import
java.util.logging.Logger
;
import
java.util.logging.SimpleFormatter
;
import
javax.swing.BorderFactory
;
import
javax.swing.JLabel
;
...
...
@@ -17,6 +22,8 @@ public class StatusBar extends JPanel {
private
int
_max
;
private
volatile
boolean
_prgsUdPending
=
false
;
private
SimpleFormatter
_format
=
new
SimpleFormatter
();
public
StatusBar
()
{
setLayout
(
new
BorderLayout
());
setBorder
(
BorderFactory
.
createEtchedBorder
());
...
...
@@ -25,9 +32,53 @@ public class StatusBar extends JPanel {
_pb
=
new
JProgressBar
();
add
(
_pb
,
BorderLayout
.
LINE_END
);
_pb
.
setEnabled
(
false
);
loggerAsStatus
();
}
private
void
loggerAsStatus
()
{
Logger
gLogger
=
Logger
.
getLogger
(
""
);
gLogger
.
addHandler
(
new
Handler
()
{
@Override
public
void
publish
(
final
LogRecord
record
)
{
SwingUtilities
.
invokeLater
(
new
Runnable
()
{
@Override
public
void
run
()
{
if
(
record
.
getLevel
().
intValue
()
<
Level
.
INFO
.
intValue
())
return
;
String
txt
=
_format
.
formatMessage
(
record
);
setStatus
(
txt
);
}
});
}
@Override
public
void
flush
()
{
}
@Override
public
void
close
()
throws
SecurityException
{
}
});
}
private
synchronized
void
updateProgress
()
{
if
(!
_prgsUdPending
)
return
;
if
(
_max
==
-
1
)
{
...
...
sw/safaripark/src/nl/nikhef/safaripark/dolly/DollyModel.java
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.logging.Logger
;
import
javax.swing.ComboBoxModel
;
import
javax.swing.DefaultComboBoxModel
;
import
javax.swing.DefaultListModel
;
import
javax.swing.ListModel
;
import
nl.nikhef.safaripark.devmgr.BaySelectionListener
;
import
nl.nikhef.safaripark.ContextCache
;
import
nl.nikhef.safaripark.extra.Module
;
import
nl.nikhef.sfp.SFPDevice
;
import
nl.nikhef.sfp.SFPDeviceListener
;
import
nl.nikhef.sfp.SFPProvider
;
import
nl.nikhef.sfp.SFPProviderListener
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
public
class
DollyModel
implements
SFPDeviceListener
,
BaySelection
Listener
{
public
class
DollyModel
implements
SFPDeviceListener
,
SFPProvider
Listener
{
private
DefaultComboBoxModel
<
Module
>
_dcb
;
private
static
final
Logger
LOG
=
Logger
.
getLogger
(
DollyModel
.
class
.
getSimpleName
());
private
DefaultComboBoxModel
<
Module
>
_dcb
=
new
DefaultComboBoxModel
<
Module
>();
private
DefaultListModel
<
Module
>
_dlm
=
new
DefaultListModel
<
Module
>();
private
File
_sourceFile
;
private
Module
_sourceModule
;
private
File
_targetFile
;
private
Collection
<
Module
>
_targetModules
;
private
String
_errorMessage
;
private
List
<
DDMIValue
>
_selectedValues
;
private
ContextCache
_cc
;
public
DollyModel
()
public
DollyModel
(
ContextCache
cc
)
{
_cc
=
cc
;
}
public
ComboBoxModel
<
Module
>
getInputComboboxModel
()
{
return
_dcb
;
}
public
ListModel
<
Module
>
getOutputListModel
()
{
return
_dlm
;
}
...
...
@@ -20,21 +54,161 @@ public class DollyModel implements SFPDeviceListener, BaySelectionListener {
@Override
public
void
sfpModuleStateChanged
(
SFPDevice
dev
,
int
bay
)
{
Module
mod
=
new
Module
(
dev
,
bay
);
if
(
dev
.
isModulePresent
(
bay
))
{
_dcb
.
addElement
(
mod
);
_dlm
.
addElement
(
mod
);
}
else
{
_dcb
.
removeElement
(
mod
);
_dlm
.
removeElement
(
mod
);
}
}
@Override
public
void
baySelected
(
SFPDevice
dev
,
int
bay
)
{
public
void
sfpDeviceAdded
(
SFPProvider
provider
,
SFPDevice
dev
)
{
dev
.
addDeviceListener
(
this
);
}
@Override
public
boolean
canSelectBay
(
SFPDevice
dev
,
int
bay
)
{
return
true
;
public
void
sfpDeviceRemoved
(
SFPProvider
provider
,
SFPDevice
dev
)
{
dev
.
removeDeviceListener
(
this
);
}
public
void
setSourceModule
(
Module
m
)
{
_sourceModule
=
m
;
_sourceFile
=
null
;
}
public
void
setSourceFile
(
File
sourceFile
)
{
_sourceFile
=
sourceFile
;
_sourceModule
=
null
;
}
public
void
setTargetFile
(
File
targetFile
)
{
_targetFile
=
targetFile
;
}
private
void
checkErrors
()
{
_errorMessage
=
null
;
if
(
_sourceFile
==
null
&&
_sourceModule
==
null
)
{
_errorMessage
=
"No valid source"
;
return
;
}
if
(
_sourceFile
!=
null
&&
!
_sourceFile
.
isFile
())
{
_errorMessage
=
"Source file does not exist"
;
return
;
}
if
((
_targetModules
==
null
||
_targetModules
.
isEmpty
())
&&
_targetFile
==
null
)
{
_errorMessage
=
"No target specified"
;
return
;
}
if
(
_targetModules
!=
null
&&
_targetModules
.
contains
(
_sourceModule
))
{
_errorMessage
=
"Target can not be source"
;
return
;
}
if
(
_selectedValues
==
null
||
_selectedValues
.
size
()
==
0
)
{
_errorMessage
=
"No values selected"
;
return
;
}
}
public
boolean
canRun
()
{
checkErrors
();
return
_errorMessage
==
null
;
}
public
String
getErrorMessage
()
{
return
_errorMessage
;
}
public
void
setTargetModules
(
Collection
<
Module
>
selectedItems
)
{
_targetModules
=
selectedItems
;
}
public
void
setSelectedValues
(
List
<
DDMIValue
>
selection
)
{
_selectedValues
=
selection
;
}
public
void
doClone
()
{
ValueGetter
vg
;
if
(
_sourceFile
!=
null
)
{
try
{
vg
=
new
FileValueGetter
(
_sourceFile
);
}
catch
(
IOException
e
)
{
LOG
.
severe
(
String
.
format
(
"Clone failed, could not load file %s: %s"
,
_sourceFile
.
getPath
(),
e
));
return
;
}
}
else
{
vg
=
new
ModuleValueGetter
(
_cc
,
_sourceModule
);
}
List
<
ValueSetter
>
vs
=
new
ArrayList
<
ValueSetter
>();
for
(
Module
m
:
_targetModules
)
{
vs
.
add
(
new
ModuleValueSetter
(
_cc
,
m
));
}
if
(
_targetFile
!=
null
)
{
vs
.
add
(
new
FileValueSetter
(
_targetFile
));
}
for
(
DDMIValue
v
:
_selectedValues
)
{
byte
[]
value
;
try
{
value
=
vg
.
getValue
(
v
);
}
catch
(
IOException
e
)
{
LOG
.
severe
(
"Clone failed : "
+
e
);
break
;
}
if
(
value
==
null
||
value
.
length
==
0
)
continue
;
for
(
ValueSetter
setter
:
vs
)
{
try
{
setter
.
setValue
(
v
,
value
);
}
catch
(
IOException
e
)
{
LOG
.
warning
(
String
.
format
(
"Failed to set value %s to %s: %s"
,
v
,
setter
,
e
));
}
}
}
for
(
ValueSetter
setter
:
vs
)
{
try
{
setter
.
finished
();
}
catch
(
IOException
e
)
{
LOG
.
warning
(
String
.
format
(
"Failed to finish %s: %s"
,
setter
,
e
));
}
}
LOG
.
info
(
String
.
format
(
"Cloned %d value(s) to %d output(s)"
,
_selectedValues
.
size
(),
vs
.
size
()));
}
}
sw/safaripark/src/nl/nikhef/safaripark/dolly/DollyPanel.java
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.awt.BorderLayout
;
import
java.awt.Color
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
java.awt.event.ItemEvent
;
import
java.awt.event.ItemListener
;
import
java.io.File
;
import
javax.swing.BorderFactory
;
import
javax.swing.BoxLayout
;
import
javax.swing.ButtonGroup
;
import
javax.swing.JButton
;
import
javax.swing.JCheckBox
;
import
javax.swing.JComboBox
;
import
javax.swing.JFileChooser
;
import
javax.swing.JLabel
;
import
javax.swing.JList
;
import
javax.swing.JPanel
;
import
javax.swing.JRadioButton
;
import
javax.swing.JScrollPane
;
import
javax.swing.JSeparator
;
import
javax.swing.plaf.basic.BasicBorders.RadioButtonBorder
;
import
javax.swing.JTextField
;
import
javax.swing.filechooser.FileNameExtensionFilter
;
import
net.miginfocom.swing.MigLayout
;
import
nl.nikhef.safaripark.Title
;
import
nl.nikhef.safaripark.extra.CheckableList
;
import
nl.nikhef.safaripark.extra.Module
;
import
nl.nikhef.safaripark.res.Resources
;
import
nl.nikhef.safaripark.vsp.ValueSelectionPane
;
import
nl.nikhef.sfp.ddmi.DDMIElement
;
...
...
@@ -25,23 +33,30 @@ import nl.nikhef.sfp.ddmi.DDMILoader;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
import
nl.nikhef.tools.Filter
;
public
class
DollyPanel
extends
JPanel
{
public
class
DollyPanel
extends
JPanel
implements
ActionListener
,
ItemListener
{
private
ValueSelectionPane
_vsp
;
private
JRadioButton
_sourceFile
=
new
JRadioButton
(
"File:"
);
private
JLabel
_sourceFileName
=
new
JLabel
(
"<none>"
);
private
JButton
_sourceFileSelect
=
new
JButton
(
"..."
);
private
JRadioButton
_sourceDevice
=
new
JRadioButton
(
"Device:"
);
private
JRadioButton
_sourceFileOption
=
new
JRadioButton
(
"File:"
);
private
JTextField
_sourceFileName
=
new
JTextField
(
"<none>"
);
private
JButton
_sourceFileSelect
=
new
JButton
(
"..."
);
private
JRadioButton
_sourceModuleOption
=
new
JRadioButton
(
"Device:"
);
private
JComboBox
<
Module
>
_sourceModule
;
private
File
_sourceFile
;
private
JCheckBox
_targetFile
=
new
JCheckBox
(
"File: "
);
private
JLabel
_targetFileName
=
new
JLabel
(
"<none>"
);
private
JButton
_targetFileSelect
=
new
JButton
(
"..."
);
private
JCheckBox
_targetFileOption
=
new
JCheckBox
(
"File: "
);
private
JTextField
_targetFileName
=
new
JTextField
(
"<none>"
);
private
JButton
_targetFileSelect
=
new
JButton
(
"..."
);
private
CheckableList
<
Module
>
_targetModuleSelects
;
private
File
_targetFile
;
private
JButton
_clone
=
new
JButton
(
"Clone"
);
private
JButton
_clone
=
new
JButton
(
"Clone"
);
private
JLabel
_errorMsg
=
new
JLabel
();
private
DollyModel
_model
;
private
DollyModel
_model
;
private
JFileChooser
_fileChooser
;
public
DollyPanel
(
DDMILoader
loader
,
DollyModel
model
)
{
...
...
@@ -60,13 +75,15 @@ public class DollyPanel extends JPanel {
source
.
add
(
new
JLabel
(
"Source"
),
"wrap"
);
source
.
add
(
new
JSeparator
(),
"growx, span 3, wrap"
);
ButtonGroup
bg
=
new
ButtonGroup
();
bg
.
add
(
_sourceDevice
);
bg
.
add
(
_sourceFile
);
_sourceDevice
.
setSelected
(
true
);
source
.
add
(
_sourceDevice
);
source
.
add
(
new
JComboBox
<
String
>(),
"growx, span 2,wrap"
);
source
.
add
(
_sourceFile
);
source
.
add
(
_sourceFileName
);
bg
.
add
(
_sourceModuleOption
);
bg
.
add
(
_sourceFileOption
);
_sourceModuleOption
.
setSelected
(
true
);
source
.
add
(
_sourceModuleOption
);
_sourceModule
=
new
JComboBox
<
Module
>(
_model
.
getInputComboboxModel
());
source
.
add
(
_sourceModule
,
"growx, span 2,wrap"
);
source
.
add
(
_sourceFileOption
);
source
.
add
(
_sourceFileName
,
"growx"
);
_sourceFileName
.
setEditable
(
false
);
source
.
add
(
_sourceFileSelect
,
"wrap"
);
core
.
add
(
source
,
BorderLayout
.
NORTH
);
...
...
@@ -80,9 +97,14 @@ public class DollyPanel extends JPanel {
target
.
add
(
new
JLabel
(
"Targets"
),
"wrap"
);
target
.
add
(
new
JSeparator
(),
"growx, span 3, wrap"
);
target
.
add
(
new
JLabel
(
"Devices: "
));
target
.
add
(
new
JScrollPane
(
new
JList
<
String
>()),
"growx, span 2, wrap"
);
target
.
add
(
_targetFile
);
target
.
add
(
_targetFileName
);
_targetModuleSelects
=
new
CheckableList
<
Module
>(
_model
.
getOutputListModel
());
JScrollPane
jsp
=
new
JScrollPane
(
_targetModuleSelects
);
target
.
add
(
new
JScrollPane
(
_targetModuleSelects
),
"growx, span 2, wrap, height :100:"
);
target
.
add
(
_targetFileOption
);
target
.
add
(
_targetFileName
,
"growx"
);
_targetFileName
.
setEditable
(
false
);
target
.
add
(
_targetFileSelect
,
"wrap"
);
core
.
add
(
target
,
BorderLayout
.
SOUTH
);
...
...
@@ -108,14 +130,135 @@ public class DollyPanel extends JPanel {
},
"dolly"
);
_vsp
.
addItemListener
(
this
);
add
(
core
,
BorderLayout
.
CENTER
);
JPanel
buttons
=
new
JPanel
();
buttons
.
setLayout
(
new
BorderLayout
());
_errorMsg
.
setIcon
(
Resources
.
getIcon
(
"emblem-notice"
));
_errorMsg
.
setForeground
(
Color
.
RED
);
_errorMsg
.
setVisible
(
false
);
buttons
.
add
(
_errorMsg
,
BorderLayout
.
CENTER
);
buttons
.
add
(
_clone
,
BorderLayout
.
EAST
);
add
(
buttons
,
BorderLayout
.
SOUTH
);
_fileChooser
=
new
JFileChooser
();
FileNameExtensionFilter
filter
=
new
FileNameExtensionFilter
(
"SFP Module values"
,
"smv"
);
_fileChooser
.
setFileFilter
(
filter
);
_sourceModuleOption
.
addActionListener
(
this
);
_sourceFileOption
.
addActionListener
(
this
);
_targetFileOption
.
addActionListener
(
this
);
_targetModuleSelects
.
addItemListener
(
this
);
_sourceModule
.
addItemListener
(
this
);
_targetFileSelect
.
addActionListener
(
new
ActionListener
()
{
@Override
public
void
actionPerformed
(
ActionEvent
e
)
{
selectTargetFile
();
}
});
_sourceFileSelect
.
addActionListener
(
new
ActionListener
()
{
@Override
public
void
actionPerformed
(
ActionEvent
e
)
{
selectSourceFile
();
}
});
_clone
.
addActionListener
(
new
ActionListener
()
{
@Override
public
void
actionPerformed
(
ActionEvent
e
)
{
_model
.
doClone
();
}
});
updateAll
();
}
protected
void
selectSourceFile
()
{
if
(
_fileChooser
.
showOpenDialog
(
this
)
!=
JFileChooser
.
APPROVE_OPTION
)
return
;
_sourceFile
=
_fileChooser
.
getSelectedFile
();
_sourceFileName
.
setText
(
_sourceFile
.
getPath
());
updateAll
();
}
protected
void
selectTargetFile
()
{
if
(
_fileChooser
.
showSaveDialog
(
this
)
!=
JFileChooser
.
APPROVE_OPTION
)
return
;
_targetFile
=
_fileChooser
.
getSelectedFile
();
String
targetFileName
=
_targetFile
.
getPath
();
if
(!
targetFileName
.
toLowerCase
().
endsWith
(
".smv"
))
{
_targetFile
=
new
File
(
targetFileName
+
".smv"
);
}
_targetFileName
.
setText
(
_targetFile
.
getPath
());
updateAll
();
}
private
void
updateEnabled
()
{
_sourceModule
.
setEnabled
(
_sourceModuleOption
.
isSelected
());
_sourceFileSelect
.
setEnabled
(
_sourceFileOption
.
isSelected
());
_targetFileSelect
.
setEnabled
(
_targetFileOption
.
isSelected
());
}
private
void
updateModel
()
{
if
(
_sourceModuleOption
.
isSelected
())
{
// source module must be selected
Module
m
=
Module
.
class
.
cast
(
_sourceModule
.
getSelectedItem
());
_model
.
setSourceModule
(
m
);
}
else
{
_model
.
setSourceFile
(
_sourceFile
);
}
if
(
_targetFileOption
.
isSelected
())
{
_model
.
setTargetFile
(
_targetFile
);
}
_model
.
setTargetModules
(
_targetModuleSelects
.
getSelectedItems
());
_model
.
setSelectedValues
(
_vsp
.
getSelection
());
if
(
_model
.
canRun
())
{
_clone
.
setEnabled
(
true
);
_errorMsg
.
setVisible
(
false
);
}
else
{
_clone
.
setEnabled
(
false
);
_errorMsg
.
setText
(
_model
.
getErrorMessage
());
_errorMsg
.
setVisible
(
true
);
}
}
private
void
updateAll
()
{
updateModel
();
updateEnabled
();
}
@Override
public
void
actionPerformed
(
ActionEvent
e
)
{
updateAll
();
}
@Override
public
void
itemStateChanged
(
ItemEvent
e
)
{
updateAll
();
}
}
sw/safaripark/src/nl/nikhef/safaripark/dolly/FileValueGetter.java
0 → 100644
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.io.File
;
import
java.io.FileReader
;
import
java.io.IOException
;
import
java.io.Reader
;
import
java.util.Properties
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
import
nl.nikhef.tools.Utils
;
public
class
FileValueGetter
implements
ValueGetter
{
private
Properties
_props
=
new
Properties
();
public
FileValueGetter
(
File
sourceFile
)
throws
IOException
{
Reader
r
=
new
FileReader
(
sourceFile
);
try
{
_props
.
load
(
r
);
}
finally
{
try
{
r
.
close
();
}
catch
(
IOException
e
)
{};
}
}
@Override
public
byte
[]
getValue
(
DDMIValue
v
)
{
String
name
=
v
.
getQualifiedName
();
String
prop
=
_props
.
getProperty
(
name
,
null
);
if
(
prop
==
null
)
return
null
;
return
Utils
.
hexStringToBytes
(
prop
);
}
}
sw/safaripark/src/nl/nikhef/safaripark/dolly/FileValueSetter.java
0 → 100644
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.FileWriter
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.io.Writer
;
import
java.util.Properties
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
import
nl.nikhef.tools.Utils
;
public
class
FileValueSetter
implements
ValueSetter
{
private
Properties
_props
;
private
File
_target
;
public
FileValueSetter
(
File
targetFile
)
{
_props
=
new
Properties
();
_target
=
targetFile
;
}
@Override
public
void
setValue
(
DDMIValue
value
,
byte
[]
data
)
throws
IOException
{
String
qName
=
value
.
getQualifiedName
();
_props
.
setProperty
(
qName
,
Utils
.
bytesToHexString
(
data
));
}
@Override
public
void
finished
()
throws
IOException
{
Writer
w
=
new
FileWriter
(
_target
);
try
{
_props
.
store
(
w
,
"SFP Module Values file"
);
}
finally
{
try
{
w
.
close
();
}
catch
(
IOException
e
)
{
}
// prevent close exception from overwriting the actual error
}
}
}
sw/safaripark/src/nl/nikhef/safaripark/dolly/ModuleValueGetter.java
0 → 100644
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.io.IOException
;
import
nl.nikhef.safaripark.ContextCache
;
import
nl.nikhef.safaripark.extra.Module
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
public
class
ModuleValueGetter
implements
ValueGetter
{
private
Module
_mod
;
private
ContextCache
_ctxCache
;
public
ModuleValueGetter
(
ContextCache
cache
,
Module
sourceModule
)
{
_mod
=
sourceModule
;
_ctxCache
=
cache
;
}
@Override
public
byte
[]
getValue
(
DDMIValue
v
)
throws
IOException
{
return
v
.
readRaw
(
_ctxCache
.
getContextFor
(
_mod
.
dev
,
_mod
.
bay
));
}
}
sw/safaripark/src/nl/nikhef/safaripark/dolly/ModuleValueSetter.java
0 → 100644
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.io.IOException
;
import
nl.nikhef.safaripark.ContextCache
;
import
nl.nikhef.safaripark.extra.Module
;
import
nl.nikhef.sfp.ddmi.DDMI
;
import
nl.nikhef.sfp.ddmi.DDMIContext
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
import
nl.nikhef.sfp.ddmi.DataSource
;
public
class
ModuleValueSetter
implements
ValueSetter
{
private
Module
_mod
;
private
ContextCache
_ctxCache
;
public
ModuleValueSetter
(
ContextCache
cache
,
Module
targetModule
)
{
_mod
=
targetModule
;
_ctxCache
=
cache
;
}
@Override
public
void
setValue
(
DDMIValue
value
,
byte
[]
data
)
throws
IOException
{
value
.
writeRaw
(
_ctxCache
.
getContextFor
(
_mod
.
dev
,
_mod
.
bay
),
data
);
}
@Override
public
void
finished
()
throws
IOException
{
DDMIContext
ctx
=
_ctxCache
.
getContextFor
(
_mod
.
dev
,
_mod
.
bay
);
DDMI
ddmi
=
ctx
.
getDDMI
();
for
(
DataSource
ds:
ddmi
.
getSources
())
{
ds
.
updateChecksums
(
ctx
);
}
}
}
sw/safaripark/src/nl/nikhef/safaripark/dolly/ValueGetter.java
0 → 100644
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.io.IOException
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
public
interface
ValueGetter
{
byte
[]
getValue
(
DDMIValue
v
)
throws
IOException
;
}
sw/safaripark/src/nl/nikhef/safaripark/dolly/ValueSetter.java
0 → 100644
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
dolly
;
import
java.io.IOException
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
public
interface
ValueSetter
{
void
setValue
(
DDMIValue
value
,
byte
[]
data
)
throws
IOException
;
void
finished
()
throws
IOException
;
}
sw/safaripark/src/nl/nikhef/safaripark/extra/CheckableList.java
0 → 100644
View file @
bac6db72
package
nl
.
nikhef
.
safaripark
.
extra
;
import
java.awt.Component
;
import
java.awt.ItemSelectable
;
import
java.awt.event.ItemEvent
;
import
java.awt.event.ItemListener
;
import
java.awt.event.MouseAdapter
;
import
java.awt.event.MouseEvent
;
import
java.util.Collection
;
import
java.util.Collections
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.Set
;
import
javax.swing.DefaultListModel
;
import
javax.swing.JCheckBox
;
import
javax.swing.JList
;
import
javax.swing.ListCellRenderer
;
import
javax.swing.ListModel
;
import
javax.swing.UIManager
;
import
javax.swing.event.ListDataEvent
;
import
javax.swing.event.ListDataListener
;
import
nl.nikhef.tools.ListenerManager
;
public
class
CheckableList
<
T
>
extends
JList
<
T
>
implements
ListDataListener
,
ItemSelectable
{
private
Set
<
T
>
_checked
=
new
HashSet
<
T
>();
private
CheckboxCellRenderer
<
T
>
_renderer
;
private
ListenerManager
<
ItemListener
>
_lm
=
new
ListenerManager
<
ItemListener
>(
ItemListener
.
class
);
public
CheckableList
()
{
initComponent
();
}
public
CheckableList
(
T
[]
items
)
{
super
(
items
);
initComponent
();
}
public
CheckableList
(
ListModel
<
T
>
dataModel
)
{
super
(
dataModel
);
dataModel
.
addListDataListener
(
this
);
initComponent
();
}
private
void
emitItemChange
(
T
obj
,
boolean
selected
)
{
ItemEvent
ie
=
new
ItemEvent
(
this
,
ItemEvent
.
ITEM_STATE_CHANGED
,
obj
,
selected
?
ItemEvent
.
SELECTED
:
ItemEvent
.
DESELECTED
);
_lm
.
getProxy
().
itemStateChanged
(
ie
);
}
private
void
initComponent
()
{
addMouseListener
(
new
MouseAdapter
()
{
public
void
mousePressed
(
MouseEvent
e
)
{
int
index
=
locationToIndex
(
e
.
getPoint
());
if
(
index
!=
-
1
&&
e
.
getPoint
().
getX
()
<
_renderer
.
checkboxWidth
)
{
T
obj
=
getModel
().
getElementAt
(
index
);
if
(
_checked
.
contains
(
obj
))
{
_checked
.
remove
(
obj
);
emitItemChange
(
obj
,
false
);
}
else
{
_checked
.
add
(
obj
);
emitItemChange
(
obj
,
true
);
}
repaint
();
}
}
});
_renderer
=
new
CheckboxCellRenderer
();
setCellRenderer
(
_renderer
);
}
public
Collection
<
T
>
getSelectedItems
()
{
return
Collections
.
unmodifiableCollection
(
_checked
);
}
protected
class
CheckboxCellRenderer
<
T
>
extends
JCheckBox
implements
ListCellRenderer
<
T
>
{
protected
final
int
checkboxWidth
;
public
CheckboxCellRenderer
()
{
setOpaque
(
false
);
checkboxWidth
=
UIManager
.
getIcon
(
"CheckBox.icon"
).
getIconWidth
()
+
8
;
// So, this is a bit of a nasty hack, the +8 ... should be twice the margin
}
@Override
public
Component
getListCellRendererComponent
(
JList
<?
extends
T
>
list
,
T
value
,
int
index
,
boolean
isSelected
,
boolean
cellHasFocus
)
{
setText
(
value
.
toString
());
if
(
_checked
.
contains
(
value
))
{
this
.
setSelected
(
true
);
}
else
{
this
.
setSelected
(
false
);
}
return
this
;
}
}
private
boolean
contains
(
T
object
)
{
// fast way
if
(
getModel
()
instanceof
DefaultListModel
)
{
return
DefaultListModel
.
class
.
cast
(
getModel
()).
contains
(
object
);
}
// backup slow way
for
(
int
i
=
0
;
i
<
getModel
().
getSize
();
++
i
)
{
if
(
getModel
().
getElementAt
(
i
).
equals
(
object
))
return
true
;
}
return
false
;
}
/**
* Update checked must be called if the contents of the list changes.
* When providing a model, this function will be called automatically if the model changes.
*/
public
void
updateChecked
()
{
Iterator
<
T
>
e
=
_checked
.
iterator
();
while
(
e
.
hasNext
())
{
T
obj
=
e
.
next
();
if
(!
contains
(
obj
))
{
e
.
remove
();
emitItemChange
(
obj
,
false
);
}
}
}
@Override
public
void
intervalAdded
(
ListDataEvent
e
)
{
updateChecked
();
}
@Override
public
void
intervalRemoved
(
ListDataEvent
e
)
{
updateChecked
();
}
@Override
public
void
contentsChanged
(
ListDataEvent
e
)
{
updateChecked
();
}
@Override
public
Object
[]
getSelectedObjects
()
{
return
_checked
.
toArray
(
new
Object
[
_checked
.
size
()]);
}
@Override
public
void
addItemListener
(
ItemListener
l
)
{
_lm
.
addListener
(
l
);;
}
@Override
public
void
removeItemListener
(
ItemListener
l
)
{
_lm
.
removeListener
(
l
);
}
}
sw/safaripark/src/nl/nikhef/safaripark/extra/Module.java
View file @
bac6db72
...
...
@@ -21,6 +21,36 @@ public class Module {
{
return
dev
.
getModuleName
(
bay
);
}
@Override
public
int
hashCode
()
{
final
int
prime
=
31
;
int
result
=
1
;
result
=
prime
*
result
+
bay
;
result
=
prime
*
result
+
((
dev
==
null
)
?
0
:
dev
.
hashCode
());
return
result
;
}
@Override
public
boolean
equals
(
Object
obj
)
{
if
(
this
==
obj
)
return
true
;
if
(
obj
==
null
)
return
false
;
if
(
getClass
()
!=
obj
.
getClass
())
return
false
;
Module
other
=
(
Module
)
obj
;
if
(
bay
!=
other
.
bay
)
return
false
;
if
(
dev
==
null
)
{
if
(
other
.
dev
!=
null
)
return
false
;
}
else
if
(!
dev
.
equals
(
other
.
dev
))
return
false
;
return
true
;
}
...
...
sw/safaripark/src/nl/nikhef/safaripark/monitor/MonitorModel.java
View file @
bac6db72
...
...
@@ -11,6 +11,7 @@ import javax.swing.event.TableModelEvent;
import
javax.swing.table.AbstractTableModel
;
import
nl.nikhef.safaripark.ContextCache
;
import
nl.nikhef.safaripark.extra.Module
;
import
nl.nikhef.sfp.SFPDevice
;
import
nl.nikhef.sfp.SFPDeviceListener
;
import
nl.nikhef.sfp.SFPManager
;
...
...
@@ -32,23 +33,18 @@ public class MonitorModel extends AbstractTableModel implements SFPDeviceListene
private
ContextCache
_ctxCache
;
private
List
<
DevAndBay
>
_rows
=
new
ArrayList
<
DevAndBay
>();
private
List
<
MonitoredModule
>
_rows
=
new
ArrayList
<
MonitoredModule
>();
private
class
DevAndBay
private
class
MonitoredModule
extends
Module
{
final
SFPDevice
dev
;
final
int
bay
;
DDMIContext
ctx
;
private
String
[]
data
;
public
DevAndBay
(
SFPDevice
dev
,
int
bay
)
throws
IOException
{
public
MonitoredModule
(
SFPDevice
dev
,
int
bay
)
throws
IOException
{
super
(
dev
,
bay
);
// this.dev.getLink(bay);
ctx
=
_ctxCache
.
getContextFor
(
dev
,
bay
);
this
.
dev
=
dev
;
this
.
bay
=
bay
;
}
}
...
...
@@ -104,7 +100,7 @@ public class MonitorModel extends AbstractTableModel implements SFPDeviceListene
{
for
(
int
i
=
0
;
i
<
_rows
.
size
();
i
++)
{
DevAndBay
dab
=
_rows
.
get
(
i
);
MonitoredModule
dab
=
_rows
.
get
(
i
);
if
(
dab
.
data
==
null
||
dab
.
data
.
length
!=
_columns
.
size
())
{
...
...
@@ -132,7 +128,7 @@ public class MonitorModel extends AbstractTableModel implements SFPDeviceListene
@Override
public
Object
getValueAt
(
int
row
,
int
col
)
{
DevAndBay
dab
=
_rows
.
get
(
row
);
MonitoredModule
dab
=
_rows
.
get
(
row
);
if
(
col
==
0
)
{
return
dab
.
dev
.
getModuleName
(
dab
.
bay
);
...
...
@@ -169,7 +165,7 @@ public class MonitorModel extends AbstractTableModel implements SFPDeviceListene
private
boolean
updateRowCount
()
{
int
rc
=
0
;
List
<
DevAndBay
>
dAb
=
new
ArrayList
<
DevAndBay
>();
List
<
MonitoredModule
>
dAb
=
new
ArrayList
<
MonitoredModule
>();
for
(
SFPDevice
dev
:
_devices
)
{
...
...
@@ -180,7 +176,7 @@ public class MonitorModel extends AbstractTableModel implements SFPDeviceListene
if
(!
dev
.
hasDiagnostics
(
i
))
continue
;
try
{
dAb
.
add
(
new
DevAndBay
(
dev
,
i
));
dAb
.
add
(
new
MonitoredModule
(
dev
,
i
));
rc
++;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
...
...
@@ -222,7 +218,7 @@ public class MonitorModel extends AbstractTableModel implements SFPDeviceListene
{
for
(
int
i
=
0
;
i
<
_rows
.
size
();
i
++)
{
DevAndBay
dab
=
_rows
.
get
(
i
);
MonitoredModule
dab
=
_rows
.
get
(
i
);
logFile
.
print
(
dab
.
dev
.
getModuleName
(
dab
.
bay
));
...
...
sw/safaripark/src/nl/nikhef/safaripark/vsp/CheckableTreeNode.java
View file @
bac6db72
...
...
@@ -18,10 +18,12 @@ public class CheckableTreeNode extends DefaultMutableTreeNode
private
final
String
_label
;
private
boolean
_checked
;
private
CheckableTreeNode
_parent
;
public
CheckableTreeNode
(
DDMIElement
userObject
,
String
label
)
{
public
CheckableTreeNode
(
CheckableTreeNode
parent
,
DDMIElement
userObject
,
String
label
)
{
super
(
userObject
);
_label
=
label
;
_parent
=
parent
;
}
public
void
check
()
...
...
@@ -34,6 +36,12 @@ public class CheckableTreeNode extends DefaultMutableTreeNode
_checked
=
false
;
}
protected
void
checkStateChanged
()
{
if
(
_parent
!=
null
)
{
_parent
.
checkStateChanged
();
}
}
@Override
public
void
setUserObject
(
Object
userObject
)
{
...
...
@@ -51,7 +59,7 @@ public class CheckableTreeNode extends DefaultMutableTreeNode
}
else
{
setChildState
(
v
==
TristateCheckbox
.
CHECKED
);
}
checkStateChanged
();
return
;
}
...
...
sw/safaripark/src/nl/nikhef/safaripark/vsp/ValueSelectionPane.java
View file @
bac6db72
...
...
@@ -2,6 +2,7 @@ package nl.nikhef.safaripark.vsp;
import
java.awt.BorderLayout
;
import
java.awt.Dimension
;
import
java.awt.ItemSelectable
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ItemEvent
;
import
java.awt.event.ItemListener
;
...
...
@@ -45,8 +46,9 @@ import nl.nikhef.sfp.ddmi.DDMIGroup;
import
nl.nikhef.sfp.ddmi.DDMILoader
;
import
nl.nikhef.sfp.ddmi.DDMIValue
;
import
nl.nikhef.tools.Filter
;
import
nl.nikhef.tools.ListenerManager
;
public
class
ValueSelectionPane
extends
JPanel
implements
ItemListener
{
public
class
ValueSelectionPane
extends
JPanel
implements
ItemListener
,
ItemSelectable
{
private
JTree
tree
=
new
JTree
();
// private static final Dimension MIN_SIZE = new Dimension(400, 400);
...
...
@@ -58,6 +60,9 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
private
JComboBox
<
String
>
_presetCb
;
private
Map
<
String
,
CheckableTreeNode
>
_pathMapping
=
new
HashMap
<
String
,
CheckableTreeNode
>();
private
boolean
_ignorePresetEvents
=
false
;
private
ListenerManager
<
ItemListener
>
_ilmgr
=
new
ListenerManager
<
ItemListener
>(
ItemListener
.
class
);
private
boolean
_ignoreCheckEvents
=
false
;
@SuppressWarnings
(
"serial"
)
private
Action
_saveAction
=
new
ExtendedAbstractAction
(
"Save"
,
Resources
.
getIcon
(
"disk"
),
"Save preset"
)
{
...
...
@@ -131,6 +136,7 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
};
@SuppressWarnings
(
"serial"
)
public
ValueSelectionPane
(
DDMILoader
loader
)
{
setLayout
(
new
BorderLayout
());
CheckBoxNodeRenderer
renderer
=
new
CheckBoxNodeRenderer
();
...
...
@@ -141,6 +147,7 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
tree
.
setShowsRootHandles
(
true
);
tree
.
setRootVisible
(
false
);
JToolBar
jtb
=
new
JToolBar
();
jtb
.
setFloatable
(
false
);
jtb
.
add
(
new
JLabel
(
" Preset "
));
...
...
@@ -157,10 +164,22 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
//setMinimumSize(MIN_SIZE);
//setPreferredSize(MIN_SIZE);
_ddmi
=
loader
.
getDDMI
();
_root
=
new
CheckableTreeNode
(
_ddmi
,
"DDMI"
);
_root
=
new
CheckableTreeNode
(
null
,
_ddmi
,
"DDMI"
)
{
protected
void
checkStateChanged
()
{
ValueSelectionPane
.
this
.
checkStateChanged
();
};
};
}
protected
void
checkStateChanged
()
{
if
(
_ignoreCheckEvents
)
return
;
// XXX nasty hack! Should have a proper event object
_ilmgr
.
getProxy
().
itemStateChanged
(
null
);
}
private
void
savePreset
(
String
name
)
{
Preferences
p
=
_presets
.
node
(
name
);
...
...
@@ -190,6 +209,7 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
private
void
loadPreset
(
String
name
)
{
_ignoreCheckEvents
=
true
;
Preferences
p
=
_presets
.
node
(
name
);
for
(
Map
.
Entry
<
String
,
CheckableTreeNode
>
entry
:
_pathMapping
.
entrySet
())
{
...
...
@@ -204,6 +224,8 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
}
//DefaultTreeModel.class.cast(tree.getModel())
tree
.
repaint
();
_ignoreCheckEvents
=
false
;
checkStateChanged
();
}
private
int
fillTree
(
String
path
,
CheckableTreeNode
root
,
DDMIGroup
group
,
Filter
<
DDMIElement
>
ddmiFilter
)
...
...
@@ -218,7 +240,7 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
continue
;
}
CheckableTreeNode
dmt
=
new
CheckableTreeNode
(
e
,
e
.
getLabel
());
CheckableTreeNode
dmt
=
new
CheckableTreeNode
(
root
,
e
,
e
.
getLabel
());
String
ePath
;
...
...
@@ -254,6 +276,7 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
public
void
init
(
Filter
<
DDMIElement
>
ddmiFilter
,
String
name
)
{
_ignoreCheckEvents
=
true
;
_root
.
removeAllChildren
();
_pathMapping
.
clear
();
fillTree
(
null
,
_root
,
_ddmi
,
ddmiFilter
);
...
...
@@ -278,6 +301,8 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
_presetCb
.
setModel
(
_presetCbm
);
_ignorePresetEvents
=
false
;
updateActions
();
_ignoreCheckEvents
=
false
;
checkStateChanged
();
}
...
...
@@ -373,7 +398,7 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
@Override
public
void
windowClosing
(
WindowEvent
e
)
{
System
.
out
.
printf
(
"%d element(s) selected\n"
,
vsp
.
getSelection
().
size
());
//
System.out.printf("%d element(s) selected\n", vsp.getSelection().size());
}
@Override
...
...
@@ -436,4 +461,23 @@ public class ValueSelectionPane extends JPanel implements ItemListener {
crawlSetSelected
(
_root
,
columns
);
}
@Override
public
Object
[]
getSelectedObjects
()
{
return
getSelection
().
toArray
();
}
@Override
public
void
addItemListener
(
ItemListener
l
)
{
_ilmgr
.
addListener
(
l
);
}
@Override
public
void
removeItemListener
(
ItemListener
l
)
{
_ilmgr
.
removeListener
(
l
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment