Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Sharelatex Integration #2866

Closed
wants to merge 44 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
1b545e4
Sharelatex Integration
Siedlerchr Aug 12, 2017
db29578
For debug purposes, add system out println
Siedlerchr Aug 25, 2017
446d914
Merge branch 'master' into sharelatex
koppor Oct 19, 2017
867679d
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Oct 20, 2017
418aaad
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Oct 22, 2017
74ce5b9
Added classes for prefs
Siedlerchr Oct 22, 2017
0222168
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Oct 24, 2017
6e64369
set buttn txt to logging in
Siedlerchr Oct 24, 2017
0af05f0
Improve setting of enabled/diabled actions
Siedlerchr Oct 24, 2017
67f08a9
Fix checkstyle
Siedlerchr Oct 24, 2017
48dc385
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Oct 26, 2017
c360278
Improve preferences handling
Siedlerchr Oct 27, 2017
e45e206
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Oct 27, 2017
a9d1632
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Nov 3, 2017
fac2c3d
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Nov 10, 2017
74151de
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Dec 13, 2017
c91fe49
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Dec 28, 2017
06685dd
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 6, 2018
23bf919
fix build
Siedlerchr Feb 6, 2018
dfe262d
commit
Siedlerchr Feb 6, 2018
ada867a
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 7, 2018
a8855fa
Add method for getting entry from position
lenhard Feb 7, 2018
093140a
Merge branch 'sharelatex' of github.com:JabRef/jabref into sharelatex
Siedlerchr Feb 7, 2018
855cd54
get position from json update message
Siedlerchr Feb 7, 2018
49b2c41
only parse if > 0
Siedlerchr Feb 7, 2018
65f7bb2
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 7, 2018
b6d2984
Refactor ShareLatexPreferences
lenhard Feb 7, 2018
4920b9f
Merge branch 'sharelatex' of github.com:JabRef/jabref into sharelatex
lenhard Feb 7, 2018
10f1bad
improve parsing
Siedlerchr Feb 7, 2018
3eadbfb
Merge branch 'sharelatex' of github.com:JabRef/jabref into sharelatex
Siedlerchr Feb 7, 2018
0ae5f11
unncessary import
Siedlerchr Feb 7, 2018
172a03e
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Feb 24, 2018
61177b2
Implement first version of entries merging
Siedlerchr Feb 24, 2018
99aaa1f
fix checkstyle
Siedlerchr Feb 24, 2018
954f3ab
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Aug 25, 2019
4223da5
add missing dependencies
Siedlerchr Aug 25, 2019
61a97a0
Merge remote-tracking branch 'upstream/master' into sharelatex
Siedlerchr Aug 25, 2019
23a49da
add missing diff match patch
Siedlerchr Aug 25, 2019
d473102
remove controller
Siedlerchr Aug 25, 2019
961a97d
fix action
Siedlerchr Aug 25, 2019
9e5e176
fix some more stuff
Siedlerchr Aug 25, 2019
cd82f04
fix compile errors
Siedlerchr Aug 25, 2019
8f214f1
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Aug 25, 2019
017f40e
Merge remote-tracking branch 'origin/master' into sharelatex
koppor Aug 25, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,11 @@ dependencies {
compile group: 'com.microsoft.azure', name: 'applicationinsights-core', version: '2.4.1'
compile group: 'com.microsoft.azure', name: 'applicationinsights-logging-log4j2', version: '2.4.1'

implementation 'com.google.code.gson:gson:2.8.5'
compile 'org.glassfish.tyrus.bundles:tyrus-standalone-client:1.15'
compile 'org.glassfish.tyrus.ext:tyrus-extension-deflate:1.15'
compile "org.bitbucket.cowwoc.diff-match-patch:diff-match-patch:1.0"

testCompile 'junit:junit:4.12'
testImplementation 'org.junit.jupiter:junit-jupiter:5.5.1'
testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.5.1'
Expand Down
10 changes: 10 additions & 0 deletions external-libraries.txt
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,16 @@ Project: Flowless
URL: https://github.com/TomasMikula/Flowless
License: BSD-2-Clause

Id: org.glassfish.tyrus.bundles:tyrus-standalone-client
Projekt: Tyrus
URL: https://tyrus.java.net/
Licence: CDDL 1.1 and GPL 2 with CPE

Id: com.google.code.gson:gson
Project: google-gson
URL: https://github.com/google/gson
License: Apache-2.0

Id: org.fxmisc.richtext:richtextfx
Project: RichTextFX
URL: https://github.com/TomasMikula/RichTextFX
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/org/jabref/Globals.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.jabref.logic.journals.JournalAbbreviationLoader;
import org.jabref.logic.protectedterms.ProtectedTermsLoader;
import org.jabref.logic.remote.server.RemoteListenerServerLifecycle;
import org.jabref.logic.sharelatex.ShareLatexManager;
import org.jabref.logic.util.BuildInfo;
import org.jabref.model.entry.BibEntryTypesManager;
import org.jabref.model.util.FileUpdateMonitor;
Expand Down Expand Up @@ -60,6 +61,7 @@ public class Globals {
public static ClipBoardManager clipboardManager = new ClipBoardManager();

public static StateManager stateManager = new StateManager();
public static ShareLatexManager shareLatexManager = new ShareLatexManager();
public static ExporterFactory exportFactory;
public static CountingUndoManager undoManager = new CountingUndoManager();
public static BibEntryTypesManager entryTypesManager = new BibEntryTypesManager();
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/org/jabref/gui/DefaultInjector.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.jabref.logic.journals.JournalAbbreviationLoader;
import org.jabref.logic.protectedterms.ProtectedTermsLoader;
import org.jabref.model.util.FileUpdateMonitor;
import org.jabref.logic.sharelatex.ShareLatexManager;
import org.jabref.preferences.PreferencesService;

import com.airhacks.afterburner.injection.Injector;
Expand Down Expand Up @@ -40,6 +41,8 @@ private static Object createDependency(Class<?> clazz) {
return Globals.journalAbbreviationLoader;
} else if (clazz == StateManager.class) {
return Globals.stateManager;
} else if (clazz == ShareLatexManager.class) {
return Globals.shareLatexManager;
} else if (clazz == FileUpdateMonitor.class) {
return Globals.getFileUpdateMonitor();
} else if (clazz == ProtectedTermsLoader.class) {
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/org/jabref/gui/JabRefFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -1329,4 +1329,10 @@ private void updateTexts(UndoChangeEvent event) {
*/
}
}

//TODO: FIXME
public Object getSynchronizeWithSharelatexAction() {
// TODO Auto-generated method stub
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.jabref.gui.actions;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;

import org.jabref.Globals;

public class DisconnectFromSharelatexAction extends AbstractAction {

public DisconnectFromSharelatexAction() {
super();
putValue(Action.NAME, "Disconnect from ShareLaTeX");

}

@Override
public void actionPerformed(ActionEvent e) {
Globals.shareLatexManager.disconnectAndCloseConnection();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.jabref.gui.actions;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;

import org.jabref.Globals;
import org.jabref.gui.StateManager;
import org.jabref.logic.sharelatex.ShareLatexManager;

public class SendChangesToShareLatexAction extends AbstractAction {

public SendChangesToShareLatexAction() {
super();
putValue(Action.NAME, "Send changes to ShareLaTeX Server");

}

@Override
public void actionPerformed(ActionEvent e) {

ShareLatexManager manager = Globals.shareLatexManager;
StateManager stateManager = Globals.stateManager;
manager.sendNewDatabaseContent(stateManager.getActiveDatabase().get());
System.out.println("Send changes");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.jabref.gui.actions;

import org.jabref.gui.sharelatex.ShareLatexLoginDialogView;

public class SynchronizeWithShareLatexAction extends SimpleCommand {

public SynchronizeWithShareLatexAction() {
super();
}

@Override
public void execute() {
new ShareLatexLoginDialogView().show();

}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.jabref.gui.shared;

import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Expand Down Expand Up @@ -208,7 +207,7 @@ private void setPreferences() {
if (rememberPassword.get()) {
try {
prefs.setPassword(new Password(password.getValue(), password.getValue()).encrypt());
} catch (GeneralSecurityException | UnsupportedEncodingException e) {
} catch (GeneralSecurityException e) {
LOGGER.error("Could not store the password due to encryption problems.", e);
}
} else {
Expand Down Expand Up @@ -246,7 +245,7 @@ private void applyPreferences() {
if (sharedDatabasePassword.isPresent() && sharedDatabaseUser.isPresent()) {
try {
password.setValue(new Password(sharedDatabasePassword.get().toCharArray(), sharedDatabaseUser.get()).decrypt());
} catch (GeneralSecurityException | UnsupportedEncodingException e) {
} catch (GeneralSecurityException e) {
LOGGER.error("Could not read the password due to decryption problems.", e);
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package org.jabref.gui.sharelatex;

import javax.inject.Inject;

import javafx.fxml.FXML;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;

import org.jabref.Globals;
import org.jabref.gui.DialogService;
import org.jabref.gui.FXDialog;
import org.jabref.gui.util.BaseDialog;
import org.jabref.logic.sharelatex.ShareLatexManager;
import org.jabref.logic.sharelatex.SharelatexConnectionProperties;

public class ShareLatexLoginDialogView extends BaseDialog<Void> {

@FXML private TextField tbAddress;
@FXML private TextField tbUsername;
@FXML private PasswordField tbPassword;
@FXML private Button btnLogin;
@Inject private ShareLatexManager manager;
@Inject DialogService dialogService;

private SharelatexConnectionProperties props;
private ShareLatexLoginDialogViewModel viewModel;

@FXML
private void initialize() {
viewModel = new ShareLatexLoginDialogViewModel();
}

@FXML
private void closeDialog() {
}

@FXML
private void signIn() {
btnLogin.setText("Logging in....");
try {
String result = manager.login(tbAddress.getText(), tbUsername.getText(), tbPassword.getText());
if (result.contains("incorrect")) {
FXDialog dlg = new FXDialog(AlertType.ERROR);
dlg.setContentText("Your email or password is incorrect. Please try again");
dlg.showAndWait();
} else {
//TODO: Wait until pdf + injection stuff gets merged

props = new SharelatexConnectionProperties(Globals.prefs.getShareLatexPreferences());

props.setUrl(tbAddress.getText());
props.setUser(tbUsername.getText());
props.setPassword(tbPassword.getText());

manager.setConnectionProperties(props);

ShareLatexProjectDialogView dlgprojects = new ShareLatexProjectDialogView();
dlgprojects.show();
closeDialog();

}
} catch (Exception e) {

dialogService.showErrorDialogAndWait(e);

}

}
/*
FXDialog sharelatexProjectDialog = new FXDialog(AlertType.INFORMATION, "Sharelatex Project Dialog");
sharelatexProjectDialog.setDialogPane((DialogPane) this.getView());
sharelatexProjectDialog.setResizable(true);
sharelatexProjectDialog.show();
*/

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.jabref.gui.sharelatex;

import org.jabref.gui.AbstractViewModel;

public class ShareLatexLoginDialogViewModel extends AbstractViewModel {
//default construtor used
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package org.jabref.gui.sharelatex;

import java.io.IOException;
import java.util.Optional;

import javax.inject.Inject;

import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.CheckBoxTableCell;

import org.jabref.gui.StateManager;
import org.jabref.gui.util.BaseDialog;
import org.jabref.gui.util.DefaultFileUpdateMonitor;
import org.jabref.logic.sharelatex.ShareLatexManager;
import org.jabref.model.database.BibDatabaseContext;
import org.jabref.preferences.PreferencesService;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class ShareLatexProjectDialogView extends BaseDialog<Void> {

private static final Log LOGGER = LogFactory.getLog(ShareLatexProjectDialogViewModel.class);

@FXML private TableColumn<ShareLatexProjectViewModel, Boolean> colActive;
@FXML private TableColumn<ShareLatexProjectViewModel, String> colTitle;
@FXML private TableColumn<ShareLatexProjectViewModel, String> colFirstName;
@FXML private TableColumn<ShareLatexProjectViewModel, String> colLastName;
@FXML private TableColumn<ShareLatexProjectViewModel, String> colLastModified;
@FXML private TableView<ShareLatexProjectViewModel> tblProjects;
@Inject private ShareLatexManager manager;
@Inject private StateManager stateManager;
@Inject private PreferencesService preferences;

private ShareLatexProjectDialogViewModel viewModel;

@Inject private DefaultFileUpdateMonitor fileMonitor;

@FXML
private void initialize() {
viewModel = new ShareLatexProjectDialogViewModel(stateManager, manager, preferences.getImportFormatPreferences(), fileMonitor);
try {
viewModel.addProjects(manager.getProjects());
} catch (IOException e) {
LOGGER.error("Could not add projects", e);
}

tblProjects.setEditable(true);
colActive.setEditable(true);

colActive.setCellFactory(CheckBoxTableCell.forTableColumn(colActive));

colActive.setCellValueFactory(cellData -> cellData.getValue().isActiveProperty());
colTitle.setCellValueFactory(cellData -> cellData.getValue().getProjectTitle());
colFirstName.setCellValueFactory(cellData -> cellData.getValue().getFirstName());
colLastName.setCellValueFactory(cellData -> cellData.getValue().getLastName());
colLastModified.setCellValueFactory(cellData -> cellData.getValue().getLastUpdated());
setBindings();

}

private void setBindings() {
tblProjects.itemsProperty().bindBidirectional(viewModel.projectsProperty());
}

@FXML
private void synchronizeLibrary() {
Optional<ShareLatexProjectViewModel> projects = viewModel.projectsProperty().filtered(x -> x.isActive())
.stream().findFirst();

if (projects.isPresent() && stateManager.getActiveDatabase().isPresent()) {
String projectID = projects.get().getProjectId();
BibDatabaseContext database = stateManager.getActiveDatabase().get();
manager.startWebSocketHandler(projectID, database, preferences.getImportFormatPreferences(), fileMonitor);
}

}

@FXML
private void cancelAndClose() {
}

}
Loading