Commit 0b317d62 by Tuukka Kivilahti

select multible readers, part 1

1 parent e4aed2ca
...@@ -95,10 +95,17 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -95,10 +95,17 @@ public class ReaderBean implements ReaderBeanLocal {
if (reader == null || code == null || code.isEmpty()) { if (reader == null || code == null || code.isEmpty()) {
return null; return null;
} }
logger.info("got code from reader {}", code); logger.info("got code from reader {}", code);
code = code.replace("\"\b", ""); 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 (ReaderType.RFID.equals(reader.getType())) {
if (Pattern.matches("^.*000000$", code)) if (Pattern.matches("^.*000000$", code))
...@@ -113,6 +120,7 @@ public class ReaderBean implements ReaderBeanLocal { ...@@ -113,6 +120,7 @@ public class ReaderBean implements ReaderBeanLocal {
code = sb.toString(); code = sb.toString();
} }
ReaderEvent event = new ReaderEvent(new Date(), reader, code); ReaderEvent event = new ReaderEvent(new Date(), reader, code);
// first, check if dublicate, there is 30s timeout for dublicates, // first, check if dublicate, there is 30s timeout for dublicates,
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
<reader:backendReader selectvalue="#{i18n['barcodeReader.readBarcode']}" selectaction="#{incomingView.polledRead}" /> <reader:backendReader selectvalue="#{i18n['barcodeReader.readBarcode']}" selectaction="#{incomingView.polledRead}" />
<h:form> <h:form>
<p:autoComplete id="acsb" value="#{infoView.multiSearchUser}" completeMethod="#{infoView.matchMulti}" converter="#{eventUserConverter}" var="usrx" itemLabel="#{usrx.shortUserDescriptor}" itemValue="#{usrx}"> <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}" /> <p:ajax event="itemSelect" listener="#{incomingView.changeUser}" />
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
</ui:define> </ui:define>
<ui:define name="content"> <ui:define name="content">
<infoview:userselector /> <infoview:userselector />
<reader:readerlist />
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
package fi.codecrew.moya.web.cdiview.reader; package fi.codecrew.moya.web.cdiview.reader;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.enterprise.context.SessionScoped; import javax.enterprise.context.SessionScoped;
import javax.inject.Named; import javax.inject.Named;
...@@ -29,15 +31,45 @@ public class ReaderNameContainer implements Serializable { ...@@ -29,15 +31,45 @@ public class ReaderNameContainer implements Serializable {
private static final long serialVersionUID = 571747919767505523L; 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; 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() { 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) { 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() { public boolean isAutopoll() {
...@@ -48,4 +80,8 @@ public class ReaderNameContainer implements Serializable { ...@@ -48,4 +80,8 @@ public class ReaderNameContainer implements Serializable {
this.autopoll = autopoll; this.autopoll = autopoll;
} }
public void clearReaders() {
readers = null;
}
} }
...@@ -248,20 +248,36 @@ public class ReaderView extends GenericCDIView { ...@@ -248,20 +248,36 @@ public class ReaderView extends GenericCDIView {
} }
/**
* 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() { public ReaderEvent getReaderEvent() {
if(namecontainer.isAutopoll()) { if(namecontainer.isAutopoll()) {
if(isNewCodes()) { if(isNewCodes()) {
pollingCodeHandled(); return pollingCodeHandled();
return readerbean.getLastReaderEvent(namecontainer.getReaderId()); // return getNewestEvent();
// return readerbean.getLastReaderEvent(namecontainer.getReaderId());
} else { } else {
return null; return null;
} }
} }
if (readerEventList == null) if (readerEventList == null)
return null; return null;
...@@ -280,8 +296,16 @@ public class ReaderView extends GenericCDIView { ...@@ -280,8 +296,16 @@ public class ReaderView extends GenericCDIView {
lastReadEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId()); 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() { public String saveUser() {
...@@ -294,18 +318,29 @@ public class ReaderView extends GenericCDIView { ...@@ -294,18 +318,29 @@ public class ReaderView extends GenericCDIView {
if (!namecontainer.isAutopoll()) if (!namecontainer.isAutopoll())
return false; return false;
ReaderEvent newEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId()); for(Integer rid : namecontainer.getReaders()) {
ReaderEvent event = readerbean.getLastReaderEvent(rid);
if(newEvent == null || newEvent.getId() == null)
return false;
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) if(lastReadEvent == null || lastReadEvent.getId() == null)
return true; return true;
return (newEvent.getId().equals(lastReadEvent.getId())); // is new code newer than previous code?
if(event.getUpdatetime().getTime() < event.getUpdatetime().getTime())
return true;
} }
return false;
}
public String getUserInsertCode() { public String getUserInsertCode() {
return ""; return "";
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!