Giter Club home page Giter Club logo

getodk / briefcase Goto Github PK

View Code? Open in Web Editor NEW
60.0 60.0 156.0 34.51 MB

ODK Briefcase is a Java application for fetching and pushing forms and their contents. It helps make billions of data points from ODK portable. Contribute and make the world a better place! ✨💼✨

Home Page: https://docs.getodk.org/briefcase-intro

License: Other

Java 99.99% Smarty 0.01%
data-collection global-development global-health java mobile-data-collection odk social-impact xforms

briefcase's Introduction

opendatakit

The developer wiki (including release notes) and issues tracker are located here.

This site is primarily for developers. If you are not a developer, please visit https://getodk.org/

ODK is a free and open-source set tools which help organizations author, field, and manage mobile data collection solutions. ODK provides an out-of-the-box solution for users to:

  • Build a data collection form or survey;
  • Collect the data on a mobile device and send it to a server; and
  • Aggregate the collected data on a server and extract it in useful formats.

In addition to socio-economic and health surveys with GPS locations and images, ODK is being used to create decision support for clinicians and for building multimedia-rich nature mapping tools. See featured deployments and list of tools for more examples of what the ODK community is doing. We welcome and encourage participation from the user community.

Downloads of the tools are available at Downloads.

briefcase's People

Contributors

acj avatar anakiou avatar batkinson avatar carstendev avatar cletusajibade avatar dcbriccetti avatar dmikheeva avatar dylanfprice avatar emajj avatar ggalmazor avatar huangyz0918 avatar icemc avatar jay4kelly avatar jpknox avatar kkrawczyk123 avatar kunalmulwani avatar lognaturel avatar mayank8318 avatar mitchellsundt avatar neoliteconsultant avatar nribeka avatar poketim avatar rclakmal avatar rockydcoder avatar shivam-tripathi avatar shobhitagarwal1612 avatar thedavidmccann avatar thomashhuang avatar yanokwa avatar zstojanovic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

briefcase's Issues

Remove Eclipse specific files

IntelliJ and gradle are the chosen development tools so .classpath and .project should be removed. The jars for all libraries that are now managed by gradle should also be removed.

forms-1.3.0.jar and forms-1.3.0-src.zip are files that are added by Eclipse's UI building tool (Windows Builder). I don't think they are used and so they should be removed.

Multiple refreshes of SD card dialog causes selection glitch

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:01 GMT
Originally opened as getodk/getodk#665 (1 comment(s))


Originally reported on Google Code with ID 664

If you refresh multiple times, the dialog keeps adding visual elements into radio panel.
It also keeps adding multiple radio buttons to the group. This leads to a situation
where you have your selected choice hidden underneath a bunch of empty radio buttons.

In rebuildPanel() you need to clear the radioPanel and clear out the radio group.


  private void rebuildPanel() {
    JPanel panel = radioPanel;
    radioPanel.removeAll();

....

    int len = 0;
    File oldDevice = odkDevice;
    JRadioButton activeButton = null;
    odkDevice = null;
    boolean first = true;

    if (radioGroup != null) {
        for (AbstractButton rb :  Collections.list(radioGroup.getElements())) {
            radioGroup.remove(rb);
        }
    }

Reported by [email protected] on 2012-08-15 04:13:59

Briefcase should be able to sort by FormName

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:38 GMT
Originally opened as getodk/getodk#977 (1 comment(s))


Originally reported on Google Code with ID 976

What tool are you using?

ODK Briefcase v1.4

What is frustrating, troubling, annoying or lacking?

I'm trying to only download one of a few hundred and I can't search or sort by Form
Name to make that simpler.

How would you like it to work?

To be able to sort or search would work. Adding other fields, like dates, would be
even nicer.

NOTE: the core team has limited ability to make software enhancements.
We rely heavily on community-contributed enhancements to the tools. If this
is something you very much need, consider hiring a developer to make the
changes with the stipulation that they work with the core team to specify
the details of the change and contribute the change back to the project
under an Apache 2 license.

Reported by Javirosa1912 on 2014-02-17 04:28:46

Add JSON exports to Briefcase

Issue by mitchellsundt
Thursday Jul 09, 2015 at 18:58 GMT
Originally opened as getodk/getodk#634 (0 comment(s))


Originally reported on Google Code with ID 633

We have json and kml exports in Aggregate. Would be nice to offer them in briefcase.

Reported by mitchellsundt on 2012-07-12 19:26:02

Add warning/explanation to Briefcase / Form Uploader server connect dialog that Google account is not appropriate.

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:07 GMT
Originally opened as getodk/getodk#712 (0 comment(s))


Originally reported on Google Code with ID 711

Add warning/explanation to Briefcase / Form Uploader server connect dialog that Google
account is not appropriate.

Users may be attempting to enter their Google account on this screen rather than configure
and use an ODK Aggregate username / password.


Reported by mitchellsundt on 2012-10-25 18:37:24

Unified UI

ODK Briefcase is a Java application for fetching and pushing forms and their contents. It helps make data from millions of ODK campaigns portable. On first launch, Briefcase currently displays a screen with a description of the program and its functionality. One part of this project will involve rethinking how a user gets to know how Briefcase works and sets up a Briefcase storage directory.

Additionally, Briefcase is separated into four utilities:

  • the main one which is used to push, pull and export form instances
  • a preference clearer for the main utility
  • a character set converter for CSVs
  • a blank form uploader

Currently, only the main utility is packaged for release so the other ones are not accessible by non-developers. Having a single application will make the secondary functionality usable by a broader range of users. The UX challenge here will be making the functionality clear to users and logically connecting it together.

Bonus: Add the ability to convert forms from XLSForm to XForms, probably by using pyxform (Python).

Exporting encrypted forms to CSV fails on macOS

Related to #65, exporting an encrypted CSV on macOS Sierra 10.12.3 with Java 1.8.0_121 fails with

Error decrypting:submission.xml.enc Cause: java.security.InvalidKeyException: Illegal key size

Starting Export...
Processing instance: uuidfbf126e9-3ae8-4211-83d6-5e43a17252bf
Error decrypting submission uuidfbf126e9-3ae8-4211-83d6-5e43a17252bf Cause: org.opendatakit.briefcase.model.CryptoException: Error decrypting:submission.xml.enc Cause: java.security.InvalidKeyException: Illegal key size
FAILED!

This is despite having the JCE installed (brew cask install java jce-unlimited-strength-policy). This is likely because the application is running from the JRE instead of the JDK. Maybe.

Running app from gradle breaks ability to connect via SSL connections

Software versions

Briefcase v1.4.10, Java v1.8

Steps to reproduce the problem

  1. Run gradle run
  2. Try to connect to a server with SSL cert from LetsEncrypt. App Engine servers work fine.
  3. Error dialog and stack trace

Unable to fetch formList: Unexpected javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
        at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
        at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
        at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
        at org.opendatakit.briefcase.util.AggregateUtils.httpRetrieveXmlDocument(AggregateUtils.java:306)
        at org.opendatakit.briefcase.util.AggregateUtils.getXmlDocument(AggregateUtils.java:242)
        at org.opendatakit.briefcase.util.ServerFetcher.fetchFormList(ServerFetcher.java:549)
        at org.opendatakit.briefcase.util.ServerFetcher.testServerDownloadConnection(ServerFetcher.java:529)
        at org.opendatakit.briefcase.util.ServerConnectionTest.run(ServerConnectionTest.java:43)
        at org.opendatakit.briefcase.ui.ServerConnectionDialog.actionPerformed(ServerConnectionDialog.java:204)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6535)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6300)
        at java.awt.Container.processEvent(Container.java:2236)
        at java.awt.Component.dispatchEventImpl(Component.java:4891)
        at java.awt.Container.dispatchEventImpl(Container.java:2294)
        at java.awt.Component.dispatchEvent(Component.java:4713)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
        at java.awt.Container.dispatchEventImpl(Container.java:2280)
        at java.awt.Window.dispatchEventImpl(Window.java:2750)
        at java.awt.Component.dispatchEvent(Component.java:4713)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.awt.EventQueue$4.run(EventQueue.java:729)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
        at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
        at java.awt.Dialog.show(Dialog.java:1084)
        at java.awt.Component.show(Component.java:1673)
        at java.awt.Component.setVisible(Component.java:1625)
        at java.awt.Window.setVisible(Window.java:1014)
        at java.awt.Dialog.setVisible(Dialog.java:1005)
        at org.opendatakit.briefcase.ui.PullTransferPanel$OriginActionListener.actionPerformed(PullTransferPanel.java:163)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6535)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6300)
        at java.awt.Container.processEvent(Container.java:2236)
        at java.awt.Component.dispatchEventImpl(Component.java:4891)
        at java.awt.Container.dispatchEventImpl(Container.java:2294)
        at java.awt.Component.dispatchEvent(Component.java:4713)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
        at java.awt.Container.dispatchEventImpl(Container.java:2280)
        at java.awt.Window.dispatchEventImpl(Window.java:2750)
        at java.awt.Component.dispatchEvent(Component.java:4713)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.awt.EventQueue$4.run(EventQueue.java:729)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:230)
        at sun.security.validator.Validator.validate(Validator.java:260)
        at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
        at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
        at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
        at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491)
        ... 105 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
        at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146)
        at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
        at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
        at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
        ... 111 more
Feb 09, 2017 1:51:15 PM org.opendatakit.briefcase.util.AggregateUtils httpRetrieveXmlDocument
SEVERE: Unable to fetch formList: Unexpected javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Other information

My guess is that some root certs aren't available when you run the app from gradle.

Briefcase is not respecting the daylight savings time offset when exporting (date-) time fields.

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:44 GMT
Originally opened as getodk/getodk#1075 (1 comment(s))


Originally reported on Google Code with ID 1074

What steps will reproduce the problem?
1. Fill up a form that will include "07:00:00.000Z" in some time field.
2. Export the data from the Briefcase using a computer that is (for example) in EET
time zone (+2) and the current date is such that it also has one hour offset for daylight
saving.   

What is the expected output? What do you see instead?
The expected output is "10:00 AM" but the actual output is "09:00". 

What version of the product are you using? On what operating system?
Any Briefcase under JRE 6. 

Please provide any additional information below.
The problem is lying under the getDate() function inside DateUtils.java (JavaRosa):


    public static Date getDate (DateFields f, String timezone) {
        Calendar cd = Calendar.getInstance();
        if(timezone != null) {
            cd.setTimeZone(TimeZone.getTimeZone(timezone));
        }
        cd.set(Calendar.YEAR, f.year);
        cd.set(Calendar.MONTH, f.month - MONTH_OFFSET);
        cd.set(Calendar.DAY_OF_MONTH, f.day);
        cd.set(Calendar.HOUR_OF_DAY, f.hour);
        cd.set(Calendar.MINUTE, f.minute);
        cd.set(Calendar.SECOND, f.second);
        cd.set(Calendar.MILLISECOND, f.secTicks);

        return cd.getTime();
    }

According to the following JDK bug, the "set()" method is clearing the DST information.
The workaround is to use "add()" instead:

https://bugs.openjdk.java.net/browse/JDK-6615045?focusedCommentId=13327706&page=com.atlassian.jira.plugin.system.issuetabpanels%3acomment-tabpanel#comment-13327706

Reported by [email protected] on 2014-10-17 11:12:23

Remove need for manual install of unlimited-strength JCE

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:01 GMT
Originally opened as getodk/getodk#668 (1 comment(s))


Originally reported on Google Code with ID 667

What steps will reproduce the problem?
1. Create and use an encrypted form as per the instructions.
2. Install Briefcase.
3. Download and attempt to decrypt encrypted submissions.

What is the expected output? What do you see instead?

You expect decryption to work. Instead, in the vast majority of cases, it gives an
"illegal key size" error. This is because the user's JRE installation needs to be manually
upgraded with the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction
Policy Files. This is a serious pain.

Would be nice for Briefcase to have an installer that automates or at least semi-automates
installation of the necessary files. Alternatively, might default to weaker encryption
and allow users to specify stronger encryption once their JRE's have been upgraded.
(As it stands, users in export-restricted countries can never use ODK encryption unless
an option for weaker encryption is allowed.)

Reported by chrislrobert on 2012-08-20 10:18:01

SSLPeerUnverifiedException in Briefcase

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:44 GMT
Originally opened as getodk/getodk#1062 (1 comment(s))


Originally reported on Google Code with ID 1061

http://www.sslshopper.com/ssl-checker.html#hostname=https://odk.tph.unibas.ch/ODKAggregateSSL
looks OK, but there is a SSLPeerUnverifiedException in Briefcase. Maybe we can make
Briefcase a wee bit less strict?

Reported by [email protected] on 2014-09-11 13:47:33


- _Attachment: Screen Shot 2014-09-11 at 06.47.07.png
![Screen Shot 2014-09-11 at 06.47.07.png](https://storage.googleapis.com/google-code-attachments/opendatakit/issue-1061/comment-0/Screen Shot 2014-09-11 at 06.47.07.png)_

Can/Should briefcase be usable behind a proxy

I'm trying to connect to http://opendatakit.appspot.com/ behind a proxy server. Getting following stack-trace. I suspect this is due to the proxy.

Is briefcase suppose to work behind a proxy?

org.apache.http.conn.HttpHostConnectException: Connect to opendatakit.appspot.com:80 [opendatakit.appspot.com/74.125.138.153, opendatakit.appspot.com/2607:f8b0:4002:c0c:0:0:0:99] failed: Network is unreachable (connect failed)
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:158)
        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
        at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
        at org.opendatakit.briefcase.util.AggregateUtils.testServerConnectionWithHeadRequest(AggregateUtils.java:554)
        at org.opendatakit.briefcase.util.ServerUploader.testServerUploadConnection(ServerUploader.java:391)
        at org.opendatakit.briefcase.util.ServerConnectionTest.run(ServerConnectionTest.java:41)
        at org.opendatakit.briefcase.ui.ServerConnectionDialog.actionPerformed(ServerConnectionDialog.java:204)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6533)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6298)
        at java.awt.Container.processEvent(Container.java:2236)
        at java.awt.Component.dispatchEventImpl(Component.java:4889)
        at java.awt.Container.dispatchEventImpl(Container.java:2294)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
        at java.awt.Container.dispatchEventImpl(Container.java:2280)
        at java.awt.Window.dispatchEventImpl(Window.java:2746)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.awt.EventQueue$4.run(EventQueue.java:729)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
        at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
        at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
        at java.awt.Dialog.show(Dialog.java:1084)
        at java.awt.Component.show(Component.java:1671)
        at java.awt.Component.setVisible(Component.java:1623)
        at java.awt.Window.setVisible(Window.java:1014)
        at java.awt.Dialog.setVisible(Dialog.java:1005)
        at org.opendatakit.briefcase.ui.PushTransferPanel$DestinationActionListener.actionPerformed(PushTransferPanel.java:132)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6533)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
        at java.awt.Component.processEvent(Component.java:6298)
        at java.awt.Container.processEvent(Container.java:2236)
        at java.awt.Component.dispatchEventImpl(Component.java:4889)
        at java.awt.Container.dispatchEventImpl(Container.java:2294)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
        at java.awt.Container.dispatchEventImpl(Container.java:2280)
        at java.awt.Window.dispatchEventImpl(Window.java:2746)
        at java.awt.Component.dispatchEvent(Component.java:4711)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.awt.EventQueue$4.run(EventQueue.java:729)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.net.ConnectException: Network is unreachable (connect failed)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:74)
        at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)

Suggestions for Briefcase CSV

Issue by mitchellsundt
Thursday Jul 09, 2015 at 17:49 GMT
Originally opened as getodk/getodk#218 (1 comment(s))


Originally reported on Google Code with ID 217

From Manna Energy

null fields show in the briefcase csv as nothing so you end up with a bunch of commas
in a row when there is a null value from an optional field that was skipped. This,
combined with the fact all the other fields with values have quotation marks, makes
it difficuilt to parse the csv via delimiters. Cant use commas because those can be
in the strings as well, but you cant use "," either because the null fields are lacking
quotes. We had to resort to some craftyness to properly delimit the csv. 

Reported by wbrunette on 2011-05-20 22:13:03

Error when protocol isn't specified could be more helpful.

Software and hardware versions

ODK Briefcase v1.4.9 Production, Java 1.8.0_25, MacOS 10.12.1

Problem description

The error message shown when a URL without a protocol is specified looks like:

Unable to fetch formList: Invalid url:
opendatakit.appspot.com/formList.
Failed with error: no protocol: opendatakit.appspot.com/formList

Steps to reproduce the problem

  1. Click the "Connect..." button to open the "Aggregate v1.x Server Connection" dialog.
  2. Enter in opendatakit.appspot.com or another URL without a specified protocol (e.g. http://, https://)
  3. Click the Connect button

Expected behavior

The error is not very human-friendly. It should say something like "Did you forget to specify http:// or https://?" to help the user.

Pulling can be triggered multiple times for the same form leading to ConcurrentModificationException

Software versions

Briefcase v1.4.9

Problem description

Pulling can be triggered multiple times for the same form. This can sometimes result in a ConcurrentModificationException if the same instance happens to be downloaded at the same time. Plus, it's inefficient.

Steps to reproduce the problem

  1. Select a form
  2. Click on the pull button
  3. Unselect the form and then reselect it, this makes the pull button active again
  4. Click on the pull button, the form will be pulled a second time.

Expected behavior

The pull button should always be inactive when only forms that are currently being pulled are selected.

Other information

I believe I first triggered this by starting a pull on one form, realizing I also wanted to pull a second one, and selecting that second one without unchecking the first. This is probably a more likely scenario.

The easiest fix might be to make it impossible to select a form that is currently downloading.

Sort the forms in the briefcase alphabetically

Issue by yanokwa
Wednesday Nov 23, 2016 at 10:53 GMT
Originally opened as getodk/getodk#1259 (0 comment(s))


From [email protected]

"I'm hoping this is a very simple feature request. In the aggregate server the forms are sorted alphabetically, so I can find the form I need easily, but in the briefcase I can't quite figure out the order and have to look at each row to find something. We use a single aggregate server for around 20 countries, and we have around 500 forms so far making it really time consuming to find the one you need in the briefcase!"

Exporting encrypted csv file using ODK Briefcase fails on Windows

I have been trying to export my encrypted test data using ODK Briefcase and my public-private key pair, but every time I export it, the csv file is blank except for the variable names in the header. Has anyone run into this problem before or does anyone know if I am doing anything wrong.

I never noticed the message in the corner but no it did not complete. I forgot to download the JCE but after I did so, it still failed. Here is my error:

Error decrypting submission uuid8d2c8480-d625-4058-86e2-57aab74f124a Cause: org.opendatakit.briefcase.model.CryptoException: Error decrypting base64EncryptedKey Cause: java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/OAEPWithSHA256AndMGF1Padding
FAILED!

I am using java 8 on my computer but downloaded JCE for the Java 7 version since it said so in the manual. Should I downgrade my java to java 7?

– [email protected]

Software versions

Briefcase v1.x.x, Java v1.x.x, operating system, Aggregate v1.x.x, Collect v1.x.x...

Problem description

Steps to reproduce the problem

Expected behavior

Other information

Things you tried, stack traces, related issues, suggestions on how to fix it...

The text area in the Details... dialog should not be editable

Software and hardware versions

ODK Briefcase v1.4.9 Production, Java 1.8.0_25, MacOS 10.12.1

Problem description

The text area in the Detailed Transfer Status for [form] dialog is editable.

Steps to reproduce the problem

  1. Connect to a server with forms.
  2. Click on a form's Details... button.
  3. Type in the Detailed status text area.

Expected behavior

The text area should not be editable.

Re-download deleted submission files during next pull from aggregate

Software versions
Briefcase v1.4.10, operating system windows 8,

Problem description
When a form instance(submission file) obtained by pulling the form from aggregate is deleted from its folder(usually named as the instance id). During next pull Briefcase doesn't verify that instance file is present before skipping it instead verifies if the instance folder is present. By doing so deleted instances are not re-downloaded. This will probably happen to users who play around with the briefcase storage directory and form instances

Steps to reproduce the problem

  • Pull a form say New Widgets from an aggregate server (in my case aggregate 1.0). After downloading the instances move to your briefcase storage location and locate where the instances of the particular form are stored(in my case ....\ODK Briefcase Storage\forms\New Widgets\instances).

  • enter into one or more instance directory and delete the submission file (submission.xml)

  • Go to briefcase and re-pull the form instances. The deleted instances are not re-downloaded

Expected behavior
The deleted instances should be re-downloaded during the next pull

Other information

Status in Detailed Transfer Status window should live-update

Software versions

Briefcase v1.4.9

Problem description

The status in the Detailed Transfer Status window is not updated as the transfer status changes.

Steps to reproduce the problem

  1. Select a form
  2. Click 'Push' or 'Pull'
  3. Click on the 'Details...' button for that form

The Detailed Transfer Status window is opened but it does not update as the transfer status changes.

Expected behavior

The Detailed Transfer Status window should be updated as the transfer status changes.

Other information

@carstendev I believe this is why the text area had been made editable.

Briefcase pulls incomplete instances of encrypted forms, causes error when decrypting

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:01 GMT
Originally opened as getodk/getodk#671 (1 comment(s))


Originally reported on Google Code with ID 670

What steps will reproduce the problem?
1.Use briefcase to pull instances from an encrypted form off of a device
2. One or more instances is incomplete
3. Decryption/exporting is interrupted and fails with the following error: Error decrypting
submission .... Cause:
org.opendatakit.briefcase.model.ParsingException: Missing
base64EncryptedKey element in encrypted form.


What is the expected output? What do you see instead?
Expected output is to export/decrypt without interruption, somehow skipping over the
incomplete instances that lack the encrypted key element.  Instead, the export fails
and it is necessary to manually remove incomplete instance from briefcase storage before
completing decryption.

What version of the product are you using? On what operating system?
Using ODK Collect v1.2 rev 1013, ODK Briefcase v1.0.2.1, XLSForm on Android 2.2

Please provide any additional information below.

Reported by abarnett5989 on 2012-08-22 17:05:53

Don't switch to Push tab when Pull is initiated

Software versions

Briefcase v1.4.9

Problem description

Sometimes, when I initiate a pull of a form, I am switched to the Push tab automatically. I haven't investigated when it happens in detail but it may be limited to the first time a form is pulled after app launch.

Steps to reproduce the problem

  1. Select a form
  2. Click 'Pull'

Expected behavior

The user should remain on the pull tab until explicitly switching to the push tab.

Other information

Similarly, triggering a push moves the user automatically to the export tab.

Change ODK Briefcase to use relative paths in the download-history table

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:41 GMT
Originally opened as getodk/getodk#1018 (0 comment(s))


Originally reported on Google Code with ID 1017

If you move the ODK Briefcase Storage location, Briefcase looses track of the prior
download status of its submission instance because it stores an absolute path to the
file. 

Change this to use a path relative to the ODK Briefcase Storage Location directory.



Reported by mitchellsundt on 2014-06-13 21:18:03

Text on the Details... buttons disappears in highlighted row.

Software and hardware versions

ODK Briefcase v1.4.9 Production, Java 1.8.0_25, MacOS 10.12.1

Problem description

Highlighting a form row makes the Details... button text disappear.

Steps to reproduce the problem

  1. Connect to a server.
  2. Click on a form name to highlight its row.

Expected behavior

The button text should not disappear.

Can't choose export folder in Briefcase

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:31 GMT
Originally opened as getodk/getodk#896 (2 comment(s))


Originally reported on Google Code with ID 895

When I select an Export directory, I can create a directory in the folder dialog box,
but can't choose it. Problem happens in Mac OS X 10.8.4 with Java 1.7.0_21. When I
shift to Java 1.6.0_51, it works great. 

Reported by [email protected] on 2013-08-26 18:48:53

Briefcase not retrieving all submissions

Issue by mitchellsundt
Thursday Jul 09, 2015 at 18:56 GMT
Originally opened as getodk/getodk#615 (4 comment(s))


Originally reported on Google Code with ID 614

Email to list 
http://groups.google.com/group/opendatakit/browse_thread/thread/b03e753799eee225


Hello.

I'm using ODK Briefcase v1.0.2.1 (ODK_Briefcase_1.0.2.1.jar) to pull and export submissions
for a form that uses repeated groups (Briefcase's ability to preserve relationships
is important here). In ODK Aggregate, from the bulk CSV export I can see that I have,
at one time, 207 form submissions. However, when I use ODK Briefcase to Pull these
instances, I only get 100, hence the log (in "Details..." under the "Pull" tab):

Fetching form definition
Fetching form manifest
 (getting 1 of 1 media files)
preparing to retrieve instance data
retrieving next chunk of instances from server...
fetching instance 1 ...
fetching instance 2 ...
fetching instance 3 ...

[MY EDIT: continues fetching instances 4 through 96]

fetching instance 97 ...
fetching instance 98 ...
fetching instance 99 ...
fetching instance 100 ...
retrieving next chunk of instances from server...
retrieving next chunk of instances from server...
SUCCESS!

Indeed, in the "ODK Briefcase Storage" there are only 100 instances; same as in the
export from ODK Briefcase. How do I get the remaining instances?

Thanks!

Reported by wbrunette on 2012-06-23 05:52:40

On the initial launch if the user press "Cancel" on briefcase storage location selection dialog, user is end up having a disabled main window

Software versions

Briefcase v1.4.10, Java 1.8, OS Windows 7

Problem description

On the initial launch if the user press "Cancel" on briefcase storage location selection dialog, user is end up having a totally disabled main window.

Steps to reproduce the problem

  1. Just delete/move the briefcase storage directory and relaunch the app. You will get the storage location selection popup
  2. Press "Cancel"
  3. You are end up on a disabled main window with no option of going back. Only option is to close and relaunch.

b1

b2

Expected behavior

This would probably get fixed over the summer project for unified ui. A quick fix would be to remove the "Cancel" button. Because as of now, it doesn't serve any purpose

If you have an invalid file in your Briefcase Storage Directory you throw an exception

Run gradle run, and if you have an invalid file (e.g., a hidden .DS_Store) in your Briefcase Storage Directory Briefcase throws an exception in the log.

org.opendatakit.briefcase.model.FileSystemException: Failed while reading submission xml: java.io.FileNotFoundException: /Users/yanokwa/Library/Application Support/ODK/ODK Briefcase Storage/forms/choice_filter/instances/.DS_Store/submission.xml (Not a directory)
        at org.opendatakit.briefcase.util.XmlManipulationUtils.parseXml(XmlManipulationUtils.java:290)
        at org.opendatakit.briefcase.util.ExportToCsv$1.compare(ExportToCsv.java:150)
        at org.opendatakit.briefcase.util.ExportToCsv$1.compare(ExportToCsv.java:142)
        at java.util.TimSort.binarySort(TimSort.java:296)
        at java.util.TimSort.sort(TimSort.java:221)
        at java.util.Arrays.sort(Arrays.java:1438)
        at org.opendatakit.briefcase.util.ExportToCsv.doAction(ExportToCsv.java:142)
        at org.opendatakit.briefcase.util.ExportAction$TransformFormRunnable.run(ExportAction.java:57)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

Before sending a PR, please leave a comment about how you propose to fix this.

Briefcase not encoding content type correctly

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:00 GMT
Originally opened as getodk/getodk#655 (1 comment(s))


Originally reported on Google Code with ID 654

From email list:

I'm having problems uploading images through Briefcase. What I'm doing now is putting
a jpg along with an xml file (which references the jpg) in a folder in the briefcase
storage and then pushing it to the server. Everything works fine except when I click
on the photo on Aggregate in says it's "binary data" and I can't open it. No problems
when I go to "Manually Upload Submission Data" and select the jpg and xml seperately
(i.e. I'm able to see the photo on the server).

Reported by wbrunette on 2012-07-29 19:18:04

CSV generated is 0kb!

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:38 GMT
Originally opened as getodk/getodk#987 (0 comment(s))


Originally reported on Google Code with ID 986

What steps will reproduce the problem?

1. Using ODK Briefcase 1.0 to download the forms and instances from my folders downloaded
from the tablets (works well)

2. Trying to transform the instances in the ODK Briefcase directory into csv files.
Shows export progress and reports success in odk briefcase.


What is the expected output? What do you see instead?
The csv files get created but remain empty.(0KB) The file created is also not associated
with any programme. I tried to open it up with notepad and its still empty. Opening
any of the instances (all labeled 'submission' indicate to me that there is data. What
could i be doing wrong. Am attaching one of the folders giving me trouble.

Version:
ODK Briefcase V1.4
Windows 7

Attached is one of the troubled folders

Reported by Barole8 on 2014-03-26 06:50:11


- _Attachment: [MODULE A IN- CHARGE.zip](https://storage.googleapis.com/google-code-attachments/opendatakit/issue-986/comment-0/MODULE A IN- CHARGE.zip)_

Newer Androids show up as MTP instead of a mounted drive

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:02 GMT
Originally opened as getodk/getodk#683 (2 comment(s))


Originally reported on Google Code with ID 682

Android 3.x and 4.x (Honeycomb and Ice Cream Sandwich/Jelly bean) devices have switch
away from mass-storage class (MSC) transfer protocol to Media Transfer Protocol (MTP)
connection when plugged into a host computer using USB, ODK Briefcase will not recognize
the memory card when selecting "Pull" and then "Mounted SD Card".

This causes a problem since Briefcase was designed to access mounted drives.

Reported by wbrunette on 2012-09-08 01:11:11

Unable to detect SD card in Ubuntu

Mount location of SD card in Ubuntu has been changed from /media to /media/username. We should modify mount locations to include this.

Error dialog does not wrap text

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:01 GMT
Originally opened as getodk/getodk#666 (1 comment(s))


Originally reported on Google Code with ID 665

The error dialog that Briefcase uses doesn't wrap text and so is not user friendly...

In ServerConnectionDialog.java something like this would work...

      if ( isSuccessful ) {
        serverInfo = info;
        this.setVisible(false);
      } else {

          JTextArea textArea = new JTextArea(errorString);
          textArea.setColumns(30);
          textArea.setLineWrap(true);
          textArea.setWrapStyleWord(true);
          textArea.setBackground(new Color(0, 0, 0, 0));
          textArea.setSize(textArea.getPreferredSize().width, 1);

        JOptionPane.showMessageDialog(this, textArea, "Server error",
            JOptionPane.ERROR_MESSAGE);
        okButton.setEnabled(true);
        cancelButton.setEnabled(true);
      }

Reported by [email protected] on 2012-08-15 19:42:52

Briefcase should ignore unencrypted form files when decrypting

Issue by mitchellsundt
Thursday Jul 09, 2015 at 19:27 GMT
Originally opened as getodk/getodk#868 (0 comment(s))


Originally reported on Google Code with ID 867

When data id copied directly off the phone, it is helpful to ignore the not-yet-encrpyted
data (the incomplete submissions) when generating the csv instead of crashing and burning
(i.e., skip them and continue processing, rather than abort).

Reported by mitchellsundt on 2013-07-06 22:26:38

Combine CharsetConverterDialog, MainClearBriefcasePreferencesWindow, and MainFormUploaderWindow

The main class in Briefcase is org.opendatakit.briefcase.ui.MainBriefcaseWindow, but there is code for three smaller utilities with the following main classes:

org.opendatakit.briefcase.ui.CharsetConverterDialog converts CSVs to UTF-8
org.opendatakit.briefcase.ui.MainClearBriefcasePreferencesWindow clears Briefcase preferences
org.opendatakit.briefcase.ui.MainFormUploaderWindow uploads blank forms to Aggregate instances

This functionality should be combined into a single binary.

A good first step would be to propose a single, combined user interface (where is the different functionality accessed from?).

✨ Google Summer of Code 2017 - Important dates and Q&A ✨

Welcome to all students considering submitting a proposal for Google Summer of Code 2017! We are very excited to have you here and thank you so much for all the wonderful contributions you have already made. 🎉

Project proposal time is coming up! You will have between March 20th and April 3rd to submit your proposal document. We encourage you to submit a draft as soon as possible to solicit feedback.

If you have any questions about the proposal process, please ask in the comments for this issue or on Slack in the #gsoc channel. Although we don't have a formal template that you must follow, we will use this issue to give you a sense of the things we are looking for. Please also review the GSoC manual page on proposals.

Include your GitHub and Slack handles
That's how we've come to know you!

Explain why your project and approach benefit the ODK community
What do you think the major impact of your project will be? Why is your approach the best one out of all the other possible approaches?

Have a clear plan
Your proposal is an opportunity to show us that you will be able to complete a successful project during the 12 weeks of GSoC. We will expect your writeup to include a rough timeline with major tasks described over time. How will you break the project into pieces that can be reviewed and added incrementally? How will you solicit feedback from the community and incorporate it into your design and code? What are some aspects you could cut if you run out of time or extra features you could add if you have extra time? How will you verify that your code is correct?

Explain why you're a great fit for your project
What prior experience can you draw from? Show us specific projects or even link to particular code samples! How have your recent contributions to ODK and conversations in the Slack prepared you to be a great community member?

Communicate clearly and precisely
We highly encourage diagrams and sketches when they help describe your ideas more clearly.

Again, don't hesitate to ask any questions you may have on this issue. We can't wait to read your proposals!

Do not load forms in JavaRosa at launch

On launch, ODK Briefcase seems to load each local form in JavaRosa. This can be a slow process and it's not clear to me why it is needed because all you need to load in UI is the form name.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.