Commit a07c3b85 by Tuukka Kivilahti

Merge branch 'minor-findbugs' into 'master'

Clenaup FindBugs findings

This should not contain any functional changes. Only code cleanup and formatting

See merge request !369
2 parents 7a515e8e f80a0142
...@@ -120,7 +120,7 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal { ...@@ -120,7 +120,7 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal {
throw new EJBException("Invalid Credentials"); throw new EJBException("Invalid Credentials");
} }
final String priceInCents = Integer.valueOf(bill.totalPrice().multiply(TO_CENTS).intValue()).toString(); final String priceInCents = Integer.toString(bill.totalPrice().multiply(TO_CENTS).intValue());
cb.addParam(CheckoutFiCheckParam.STAMP, getStamp(bill)); cb.addParam(CheckoutFiCheckParam.STAMP, getStamp(bill));
cb.addParam(CheckoutFiCheckParam.REFERENCE, bill.getReferenceNumber().toString()); cb.addParam(CheckoutFiCheckParam.REFERENCE, bill.getReferenceNumber().toString());
...@@ -209,7 +209,7 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal { ...@@ -209,7 +209,7 @@ public class CheckoutFiBean implements CheckoutFiBeanLocal {
.append("/MoyaWeb/checkout/") .append("/MoyaWeb/checkout/")
.toString(); .toString();
final String priceInCents = Integer.valueOf(bill.totalPrice().multiply(TO_CENTS).intValue()).toString(); final String priceInCents = Integer.toString(bill.totalPrice().multiply(TO_CENTS).intValue());
queryBuilder.addParam(CheckoutFiPaymentParam.STAMP, getStamp(bill)); queryBuilder.addParam(CheckoutFiPaymentParam.STAMP, getStamp(bill));
queryBuilder.addParam(CheckoutFiPaymentParam.AMOUNT, priceInCents); queryBuilder.addParam(CheckoutFiPaymentParam.AMOUNT, priceInCents);
......
...@@ -68,7 +68,7 @@ public class LicenseBean implements LicenseBeanLocal { ...@@ -68,7 +68,7 @@ public class LicenseBean implements LicenseBeanLocal {
/** /**
* Check, and if needed generate code for gamecode. * Check, and if needed generate code for gamecode.
* *
* @param code * @param code
*/ */
private LicenseCode generateCode(LicenseCode code) throws GenerationException { private LicenseCode generateCode(LicenseCode code) throws GenerationException {
...@@ -81,21 +81,26 @@ public class LicenseBean implements LicenseBeanLocal { ...@@ -81,21 +81,26 @@ public class LicenseBean implements LicenseBeanLocal {
try { try {
URL url = new URL(code.getLicenseTarget().getCodeUrl()); URL url = new URL(code.getLicenseTarget().getCodeUrl());
URLConnection uc;
uc = url.openConnection(); URLConnection uc = url.openConnection();
BufferedReader in = null;
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String codeString = ""; String codeString = "";
String tmpLine; String tmpLine = null;
try {
in = new BufferedReader(new InputStreamReader(uc.getInputStream()));
while ((tmpLine = in.readLine()) != null) { while ((tmpLine = in.readLine()) != null) {
if (!codeString.equals("")) { if (!codeString.isEmpty()) {
codeString += "\n"; codeString += "\n";
}
codeString += tmpLine;
} }
codeString += tmpLine; } finally {
in.close();
in = null;
} }
if (codeString.trim().equals("0") || codeString.trim().equals("")) { if (codeString.trim().equals("0") || codeString.trim().equals("")) {
throw new GenerationException("Code generate failed"); throw new GenerationException("Code generate failed");
} }
...@@ -137,8 +142,7 @@ public class LicenseBean implements LicenseBeanLocal { ...@@ -137,8 +142,7 @@ public class LicenseBean implements LicenseBeanLocal {
eventBean.getCurrentEvent().getGames().add(target); eventBean.getCurrentEvent().getGames().add(target);
licenseTargetFacade.create(target); licenseTargetFacade.create(target);
//target = licenseTargetFacade.merge(target); //target = licenseTargetFacade.merge(target);
} } else {
else {
target = licenseTargetFacade.merge(target); target = licenseTargetFacade.merge(target);
} }
} }
......
...@@ -38,7 +38,7 @@ public class MapQueue implements MapQueueI { ...@@ -38,7 +38,7 @@ public class MapQueue implements MapQueueI {
public MapQueue(EventMap map, MapQueueRules rules) { public MapQueue(EventMap map, MapQueueRules rules) {
this(map); this(map);
if(rules != null) { if (rules != null) {
this.defaultTimeoutMin = rules.getDefaultTimeoutMin(); this.defaultTimeoutMin = rules.getDefaultTimeoutMin();
this.minimumSlotsInQueue = rules.getMinimumSlotsInQueue(); this.minimumSlotsInQueue = rules.getMinimumSlotsInQueue();
this.reservingSize = rules.getReservingSize(); this.reservingSize = rules.getReservingSize();
...@@ -103,7 +103,7 @@ public class MapQueue implements MapQueueI { ...@@ -103,7 +103,7 @@ public class MapQueue implements MapQueueI {
if (queEntry != null) { if (queEntry != null) {
reserving.add(queEntry.getUser()); reserving.add(queEntry.getUser());
queEntry.setReservationTimeout(new Date(System.currentTimeMillis() + getDefaultTimeoutMin() * 60 * 1000)); queEntry.setReservationTimeout(new Date(System.currentTimeMillis() + 60L * 1000 * getDefaultTimeoutMin()));
} }
} }
} finally { } finally {
...@@ -133,7 +133,7 @@ public class MapQueue implements MapQueueI { ...@@ -133,7 +133,7 @@ public class MapQueue implements MapQueueI {
} }
public void sortQueue() { public void sortQueue() {
if(this.biggestFirst) if (this.biggestFirst)
Collections.sort(queue); Collections.sort(queue);
} }
...@@ -192,7 +192,7 @@ public class MapQueue implements MapQueueI { ...@@ -192,7 +192,7 @@ public class MapQueue implements MapQueueI {
logger.info("User in reserving queue {}", user); logger.info("User in reserving queue {}", user);
} else if (entry != null && queue.contains(entry)) { } else if (entry != null && queue.contains(entry)) {
ret = 1; ret = 1;
for (Iterator<MapReservationQueueEntry> iterator = queue.iterator(); iterator.hasNext();) { for (Iterator<MapReservationQueueEntry> iterator = queue.iterator(); iterator.hasNext(); ) {
if (iterator.next().getUser().equals(user)) { if (iterator.next().getUser().equals(user)) {
break; break;
} }
......
...@@ -83,7 +83,7 @@ public class CheckoutFiBeanTest { ...@@ -83,7 +83,7 @@ public class CheckoutFiBeanTest {
prod.setPrice(BigDecimal.valueOf(111.11).setScale(4, RoundingMode.HALF_UP)); prod.setPrice(BigDecimal.valueOf(111.11).setScale(4, RoundingMode.HALF_UP));
bill.getBillLines().add(new BillLine(bill, prod, new BigDecimal(5))); bill.getBillLines().add(new BillLine(bill, prod, new BigDecimal(5)));
final String priceInCents = Integer.valueOf(bill.totalPrice().multiply(TO_CENTS).intValue()).toString(); final String priceInCents = Integer.toString(bill.totalPrice().multiply(TO_CENTS).intValue());
final Map<String, String> requiredParams = new HashMap<>(); final Map<String, String> requiredParams = new HashMap<>();
requiredParams.put("VERSION", "0001"); requiredParams.put("VERSION", "0001");
requiredParams.put("COUNTRY", "FIN"); requiredParams.put("COUNTRY", "FIN");
......
...@@ -244,7 +244,7 @@ public class FoodWave extends GenericEntity { ...@@ -244,7 +244,7 @@ public class FoodWave extends GenericEntity {
} }
public Integer getDeliveredCount() { public Integer getDeliveredCount() {
Integer delCount = new Integer(0); Integer delCount = 0;
if (getAccountEvents() != null && getReservedCount() != 0) { if (getAccountEvents() != null && getReservedCount() != 0) {
for (AccountEvent ae : getAccountEvents()) { for (AccountEvent ae : getAccountEvents()) {
......
...@@ -57,12 +57,12 @@ import fi.codecrew.moya.model.UserImage; ...@@ -57,12 +57,12 @@ import fi.codecrew.moya.model.UserImage;
/** /**
* Servlet implementation class UploadServlet * Servlet implementation class UploadServlet
*/ */
@WebServlet(urlPatterns = { "/dydata/*" }) @WebServlet(urlPatterns = {"/dydata/*"})
public class FileDownloadServlet extends GenericImageServlet { public class FileDownloadServlet extends GenericImageServlet {
/** /**
* *
*/ */
private static final long serialVersionUID = -3359999630873773508L; private static final long serialVersionUID = -3359999630873773508L;
@EJB @EJB
private transient CardTemplateBeanLocal ctbean; private transient CardTemplateBeanLocal ctbean;
...@@ -86,7 +86,7 @@ public class FileDownloadServlet extends GenericImageServlet { ...@@ -86,7 +86,7 @@ public class FileDownloadServlet extends GenericImageServlet {
/** /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response) * response)
*/ */
private static final Pattern URLPATTERN = Pattern.compile("([^./]+)"); private static final Pattern URLPATTERN = Pattern.compile("([^./]+)");
...@@ -108,8 +108,7 @@ public class FileDownloadServlet extends GenericImageServlet { ...@@ -108,8 +108,7 @@ public class FileDownloadServlet extends GenericImageServlet {
if (urlparts.isEmpty()) { if (urlparts.isEmpty()) {
ret.setResponse(HttpServletResponse.SC_NOT_FOUND); ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
} } else if (urlparts.get(0).equals("logo")) {
else if (urlparts.get(0).equals("logo")) {
// Urlparts.get(1) == event.id. But no need to check, Just return the logo for this event // Urlparts.get(1) == event.id. But no need to check, Just return the logo for this event
LanEventProperty logo = orgbean.getProperty(LanEventPropertyKey.EVENT_LOGO); LanEventProperty logo = orgbean.getProperty(LanEventPropertyKey.EVENT_LOGO);
if (logo != null) { if (logo != null) {
...@@ -131,8 +130,7 @@ public class FileDownloadServlet extends GenericImageServlet { ...@@ -131,8 +130,7 @@ public class FileDownloadServlet extends GenericImageServlet {
} }
} }
} else if (urlparts.get(0).equals("cardtemplate") && urlparts.size() > 2) } else if (urlparts.get(0).equals("cardtemplate") && urlparts.size() > 2) {
{
int imageid = Integer.parseInt(urlparts.get(1)); int imageid = Integer.parseInt(urlparts.get(1));
CardTemplate templ = ctbean.find(imageid); CardTemplate templ = ctbean.find(imageid);
logger.info("Cardtemplate {}, {}", imageid, templ); logger.info("Cardtemplate {}, {}", imageid, templ);
...@@ -140,16 +138,14 @@ public class FileDownloadServlet extends GenericImageServlet { ...@@ -140,16 +138,14 @@ public class FileDownloadServlet extends GenericImageServlet {
ret.setData(templ.getImage()); ret.setData(templ.getImage());
ret.setImagetype("image/jpeg"); ret.setImagetype("image/jpeg");
} }
} } else if (urlparts.get(0).equals("userimage") && urlparts.size() > 2) {
else if (urlparts.get(0).equals("userimage") && urlparts.size() > 2) {
int imageid = Integer.parseInt(urlparts.get(1)); int imageid = Integer.parseInt(urlparts.get(1));
UserImage image = userbean.findUserimageFORCE(imageid); UserImage image = userbean.findUserimageFORCE(imageid);
if (image != null) { if (image != null) {
if (!permbean.isCurrentUser(image.getUser()) if (!permbean.isCurrentUser(image.getUser())
&& !permbean.hasPermission(UserPermission.VIEW_ALL)) && !permbean.hasPermission(UserPermission.VIEW_ALL)) {
{
ret.setResponse(HttpServletResponse.SC_FORBIDDEN); ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
return ret; return ret;
} }
...@@ -166,16 +162,21 @@ public class FileDownloadServlet extends GenericImageServlet { ...@@ -166,16 +162,21 @@ public class FileDownloadServlet extends GenericImageServlet {
if (dydataRoot != null) { if (dydataRoot != null) {
imagefile = new File(dydataRoot + request.getPathInfo()); imagefile = new File(dydataRoot + request.getPathInfo());
} }
if (imagefile != null && !imagefile.exists()) if (imagefile != null && !imagefile.exists()) {
{
File parentPath = new File(imagefile.getParent()); File parentPath = new File(imagefile.getParent());
if (!parentPath.isDirectory() && !parentPath.mkdirs()) { if (!parentPath.isDirectory() && !parentPath.mkdirs()) {
logger.warn("Error creating directory {}", parentPath.getAbsolutePath()); logger.warn("Error creating directory {}", parentPath.getAbsolutePath());
} }
try { try {
FileOutputStream writer = new FileOutputStream(imagefile); FileOutputStream writer = null;
writer.write(image.getImageData()); try {
writer.close(); writer = new FileOutputStream(imagefile);
writer.write(image.getImageData());
} finally {
if (writer != null) {
writer.close();
}
}
logger.info("Created image on file: {}", imagefile.getAbsolutePath()); logger.info("Created image on file: {}", imagefile.getAbsolutePath());
} catch (IOException e) { } catch (IOException e) {
logger.warn("error creating image on file {}", e); logger.warn("error creating image on file {}", e);
...@@ -192,7 +193,7 @@ public class FileDownloadServlet extends GenericImageServlet { ...@@ -192,7 +193,7 @@ public class FileDownloadServlet extends GenericImageServlet {
logger.info("Trying to print usercard for user {}", usr); logger.info("Trying to print usercard for user {}", usr);
if (usr != null) { if (usr != null) {
if (!permbean.isCurrentUser(usr.getUser()) if (!permbean.isCurrentUser(usr.getUser())
&& !permbean.hasPermission(UserPermission.VIEW_ALL)) { && !permbean.hasPermission(UserPermission.VIEW_ALL)) {
ret.setResponse(HttpServletResponse.SC_FORBIDDEN); ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
return ret; return ret;
} }
......
...@@ -146,7 +146,7 @@ public class IrcServlet extends HttpServlet { ...@@ -146,7 +146,7 @@ public class IrcServlet extends HttpServlet {
@Override @Override
public void executeIrc(IrcBot bot, String data) { public void executeIrc(IrcBot bot, String data) {
botbean.getIgnoreTypes().remove(data); botbean.getIgnoreTypes().remove(MoyaEventType.valueOf(data));
bot.say("Removed " + data + " from ignored message types"); bot.say("Removed " + data + " from ignored message types");
} }
} }
......
...@@ -78,7 +78,7 @@ public class PlaceGroupPdf extends HttpServlet { ...@@ -78,7 +78,7 @@ public class PlaceGroupPdf extends HttpServlet {
EventUser user = permbean.getCurrentUser(); EventUser user = permbean.getCurrentUser();
if (uid != null) if (uid != null)
{ {
Integer uidInt = new Integer(uid); Integer uidInt = Integer.valueOf(uid);
if (!user.getId().equals(uidInt)) if (!user.getId().equals(uidInt))
{ {
if (!permbean.hasPermission(UserPermission.VIEW_ALL)) if (!permbean.hasPermission(UserPermission.VIEW_ALL))
......
...@@ -349,7 +349,7 @@ public class PlaceMapServlet extends HttpServlet { ...@@ -349,7 +349,7 @@ public class PlaceMapServlet extends HttpServlet {
color = RESERVED_COLOR; color = RESERVED_COLOR;
// logger.debug("Setting place Reserved {}", p); // logger.debug("Setting place Reserved {}", p);
} else if (p.getProduct() != null && p.getProduct() != null && p.getProduct().getColor() != null } else if ( p.getProduct() != null && p.getProduct().getColor() != null
&& !p.getProduct().getColor().isEmpty()) { && !p.getProduct().getColor().isEmpty()) {
try { try {
color = Color.decode(p.getProduct().getColor()); color = Color.decode(p.getProduct().getColor());
......
...@@ -55,7 +55,7 @@ public class SshServlet extends HttpServlet { ...@@ -55,7 +55,7 @@ public class SshServlet extends HttpServlet {
private Map<Integer, SshServer> servers = new HashMap<Integer, SshServer>(); private Map<Integer, SshServer> servers = new HashMap<Integer, SshServer>();
// Timeout 30 min // Timeout 30 min
private static final String TIMEOUT = new Integer(1000 * 60 * 30).toString(); private static final String TIMEOUT = Integer.toString(1000 * 60 * 30);
@EJB @EJB
private EventBeanLocal eventbean; private EventBeanLocal eventbean;
......
...@@ -202,8 +202,8 @@ public class MapManageView extends GenericCDIView { ...@@ -202,8 +202,8 @@ public class MapManageView extends GenericCDIView {
Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap(); Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
startX = new Integer(requestParams.get(clientId + ".x")).intValue(); startX = Integer.valueOf(requestParams.get(clientId + ".x")).intValue();
startY = new Integer(requestParams.get(clientId + ".y")).intValue(); startY = Integer.valueOf(requestParams.get(clientId + ".y")).intValue();
} }
public String removeAllPlaces() public String removeAllPlaces()
......
...@@ -150,7 +150,7 @@ public class MapPlacechangeView extends GenericCDIView { ...@@ -150,7 +150,7 @@ public class MapPlacechangeView extends GenericCDIView {
public void toggleDstPlace() { public void toggleDstPlace() {
Map<String, String> paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); Map<String, String> paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
Integer placeId = new Integer(paramMap.get("placeId")); Integer placeId = Integer.valueOf(paramMap.get("placeId"));
Place place = placebean.find(placeId); Place place = placebean.find(placeId);
toggleSuccess = false; toggleSuccess = false;
......
...@@ -100,8 +100,8 @@ public class PlaceView extends GenericCDIView { ...@@ -100,8 +100,8 @@ public class PlaceView extends GenericCDIView {
Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap(); Map<String, String> requestParams = context.getExternalContext().getRequestParameterMap();
logger.info("Requestmap for clientId {}: {}", clientId, requestParams); logger.info("Requestmap for clientId {}: {}", clientId, requestParams);
int x = new Integer(requestParams.get(clientId + ".x")).intValue(); int x =Integer.valueOf(requestParams.get(clientId + ".x")).intValue();
int y = new Integer(requestParams.get(clientId + ".y")).intValue(); int y = Integer.valueOf(requestParams.get(clientId + ".y")).intValue();
logger.debug("Clicked position {} {}", x, y); logger.debug("Clicked position {} {}", x, y);
place = placebean.findPlace(getCurrentMap(), x, y); place = placebean.findPlace(getCurrentMap(), x, y);
......
...@@ -110,31 +110,32 @@ public class TournamentCreateView extends GenericCDIView { ...@@ -110,31 +110,32 @@ public class TournamentCreateView extends GenericCDIView {
public String onFlowProcess(FlowEvent event) { public String onFlowProcess(FlowEvent event) {
switch (event.getOldStep()) { switch (event.getOldStep()) {
case "selectGame": case "selectGame":
if (tournamentGameName.length() > 0) { if (tournamentGameName.length() > 0) {
// oh lurd, we want to create a new gamy now // oh lurd, we want to create a new gamy now
TournamentGame tg = new TournamentGame(); TournamentGame tg = new TournamentGame();
tg.setName(tournamentGameName); tg.setName(tournamentGameName);
tg.setDescription(tournamentGameDescription); tg.setDescription(tournamentGameDescription);
tg.setLanEvent(eventBean.getCurrentEvent()); tg.setLanEvent(eventBean.getCurrentEvent());
game = tournamentBean.createGame(tg); game = tournamentBean.createGame(tg);
} }
tournamentRules = tournamentBean.getRulesByGame(game);
break;
case "selectRuleset":
if (rulesetName != null && rulesetName.length() > 0) {
TournamentRule tr = new TournamentRule();
tr.setName(rulesetName);
tr.setDescription(rulesetDescription);
tr.setRules(rulesetRules);
tr.setTournamentGame(game);
rules = tournamentBean.createRule(tr);
tournamentRules = tournamentBean.getRulesByGame(game); tournamentRules = tournamentBean.getRulesByGame(game);
} break;
break; case "selectRuleset":
if (rulesetName != null && rulesetName.length() > 0) {
TournamentRule tr = new TournamentRule();
tr.setName(rulesetName);
tr.setDescription(rulesetDescription);
tr.setRules(rulesetRules);
tr.setTournamentGame(game);
rules = tournamentBean.createRule(tr);
tournamentRules = tournamentBean.getRulesByGame(game);
}
break;
default:
} }
return event.getNewStep(); return event.getNewStep();
} }
......
...@@ -132,7 +132,7 @@ public class UserSearchView extends PaginationView<UserWrapper> { ...@@ -132,7 +132,7 @@ public class UserSearchView extends PaginationView<UserWrapper> {
SearchResult<EventUser> sr = userbean.getThisEventsUsers(sq); SearchResult<EventUser> sr = userbean.getThisEventsUsers(sq);
logger.info("sortfield {}, order {}, querysort: {}", new Object[] { sortField, sortOrder, sq.getSortDirection() }); logger.info("sortfield {}, order {}, querysort: {}", new Object[] { sortField, sortOrder, sq.getSortDirection() });
this.setRowCount(new Long(sr.getResultcount()).intValue()); this.setRowCount(Long.valueOf(sr.getResultcount()).intValue());
this.setWrappedData(sr.getResults()); this.setWrappedData(sr.getResults());
setResultcount(sr.getResultcount()); setResultcount(sr.getResultcount());
...@@ -172,7 +172,7 @@ public class UserSearchView extends PaginationView<UserWrapper> { ...@@ -172,7 +172,7 @@ public class UserSearchView extends PaginationView<UserWrapper> {
SearchResult<User> sr = userbean.getUsers(sq); SearchResult<User> sr = userbean.getUsers(sq);
this.setRowCount(new Long(sr.getResultcount()).intValue()); this.setRowCount(Long.valueOf(sr.getResultcount()).intValue());
setResultcount(sr.getResultcount()); setResultcount(sr.getResultcount());
List<UserWrapper> wrappers = getUserWrappers(sr.getResults()); List<UserWrapper> wrappers = getUserWrappers(sr.getResults());
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
*/ */
package fi.codecrew.moya.web.helper; package fi.codecrew.moya.web.helper;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
...@@ -28,6 +29,7 @@ import java.util.Set; ...@@ -28,6 +29,7 @@ import java.util.Set;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import fi.codecrew.moya.beans.SessionMgmtBeanLocal; import fi.codecrew.moya.beans.SessionMgmtBeanLocal;
import fi.codecrew.moya.beans.SessionMgmtBeanLocal.UserContainer; import fi.codecrew.moya.beans.SessionMgmtBeanLocal.UserContainer;
...@@ -145,8 +147,10 @@ public class HttpSessionWrapper ...@@ -145,8 +147,10 @@ public class HttpSessionWrapper
return hostname; return hostname;
} }
private static class LastSeenComparator implements Comparator<HttpSessionWrapper> { private static class LastSeenComparator implements Comparator<HttpSessionWrapper>, Serializable {
// We actually check for object equality
@SuppressFBWarnings("RC_REF_COMPARISON")
public int compare(HttpSessionWrapper o1, HttpSessionWrapper o2) { public int compare(HttpSessionWrapper o1, HttpSessionWrapper o2) {
Long t2 = o2.getLastAccessedTime(); Long t2 = o2.getLastAccessedTime();
Long t1 = o1.getLastAccessedTime(); Long t1 = o1.getLastAccessedTime();
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!