Commit 0b317d62 by Tuukka Kivilahti

select multible readers, part 1

1 parent e4aed2ca
......@@ -95,10 +95,17 @@ public class ReaderBean implements ReaderBeanLocal {
if (reader == null || code == null || code.isEmpty()) {
return null;
}
logger.info("got code from reader {}", code);
code = code.replace("\"\b", "");
/**
* Some of rfid-readers adds zeros to start, some to end
*
* Also, under 16 char -rdid (the smaller one) should be 16 character long,
* with zeros on beginning.
*/
if (ReaderType.RFID.equals(reader.getType())) {
if (Pattern.matches("^.*000000$", code))
......@@ -113,6 +120,7 @@ public class ReaderBean implements ReaderBeanLocal {
code = sb.toString();
}
ReaderEvent event = new ReaderEvent(new Date(), reader, code);
// first, check if dublicate, there is 30s timeout for dublicates,
......
......@@ -21,6 +21,7 @@
<reader:backendReader selectvalue="#{i18n['barcodeReader.readBarcode']}" selectaction="#{incomingView.polledRead}" />
<h:form>
<p:autoComplete id="acsb" value="#{infoView.multiSearchUser}" completeMethod="#{infoView.matchMulti}" converter="#{eventUserConverter}" var="usrx" itemLabel="#{usrx.shortUserDescriptor}" itemValue="#{usrx}">
<p:ajax event="itemSelect" listener="#{incomingView.changeUser}" />
......
......@@ -30,6 +30,7 @@
</ui:define>
<ui:define name="content">
<infoview:userselector />
<reader:readerlist />
......
......@@ -19,6 +19,8 @@
package fi.codecrew.moya.web.cdiview.reader;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
......@@ -29,15 +31,45 @@ public class ReaderNameContainer implements Serializable {
private static final long serialVersionUID = 571747919767505523L;
private Integer readerId;
//private Integer readerId;
// handling first user when using via getReaderId and setReaderId;
private List<Integer> readers;
private boolean autopoll = false;
/**
* use this function when using readers in "only one reader" -mode
*
* @return first selected reader, or null if no reader selected
*/
public Integer getReaderId() {
return readerId;
if(readers == null)
return null;
return readers.get(0);
}
/**
* Use this function when using readers in "only one reader" -mode
* @param readerId to set, or null to clear all readers
*/
public void setReaderId(Integer readerId) {
this.readerId = readerId;
if(readerId == null)
clearReaders();
if(getReaders().size() == 0) {
getReaders().add(readerId);
} else {
getReaders().set(0, readerId);
}
}
public List<Integer> getReaders() {
if(readers == null)
readers = new ArrayList<Integer>();
return readers;
}
public boolean isAutopoll() {
......@@ -47,5 +79,9 @@ public class ReaderNameContainer implements Serializable {
public void setAutopoll(boolean autopoll) {
this.autopoll = autopoll;
}
public void clearReaders() {
readers = null;
}
}
......@@ -247,21 +247,37 @@ public class ReaderView extends GenericCDIView {
return ReaderType.values();
}
/**
* Get newest readerevent from any reader
* @return
*/
public ReaderEvent getNewestEvent() {
ReaderEvent newestEvent = null;
for(Integer rid : namecontainer.getReaders()) {
ReaderEvent event = readerbean.getLastReaderEvent(rid);
if(newestEvent == null || event.getUpdatetime().getTime() > newestEvent.getUpdatetime().getTime()) {
newestEvent = event;
}
}
return newestEvent;
}
public ReaderEvent getReaderEvent() {
if(namecontainer.isAutopoll()) {
if(isNewCodes()) {
pollingCodeHandled();
return readerbean.getLastReaderEvent(namecontainer.getReaderId());
return pollingCodeHandled();
// return getNewestEvent();
// return readerbean.getLastReaderEvent(namecontainer.getReaderId());
} else {
return null;
}
}
if (readerEventList == null)
return null;
......@@ -280,8 +296,16 @@ public class ReaderView extends GenericCDIView {
lastReadEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId());
}
public void pollingCodeHandled() {
lastReadEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId());
/**
* Mark pollingcode handled (for autoread-stuff)
*
* And also return last code, just in case.
* @return
*/
public ReaderEvent pollingCodeHandled() {
lastReadEvent = getNewestEvent();
return lastReadEvent;
}
public String saveUser() {
......@@ -294,16 +318,27 @@ public class ReaderView extends GenericCDIView {
if (!namecontainer.isAutopoll())
return false;
ReaderEvent newEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId());
if(newEvent == null || newEvent.getId() == null)
return false;
for(Integer rid : namecontainer.getReaders()) {
ReaderEvent event = readerbean.getLastReaderEvent(rid);
if(event == null || event.getId() == null) {
continue;
}
// found new code, and there is no previous code, that's true
if(lastReadEvent == null || lastReadEvent.getId() == null)
return true;
// is new code newer than previous code?
if(event.getUpdatetime().getTime() < event.getUpdatetime().getTime())
return true;
}
if(lastReadEvent == null || lastReadEvent.getId() == null)
return true;
return (newEvent.getId().equals(lastReadEvent.getId()));
return false;
}
public String getUserInsertCode() {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!