Системы электронного документооборота
Министерство
образования и науки Российской Федерации
Федеральное
государственное автономное образовательное учреждение высшего профессионального
образования «Казанский (Приволжский)
федеральный
университет»
Институт
вычислительной математики и информационных технологий
КАФЕДРА
МАТЕМАТИЧЕСКОЙ СТАТИСТИКИ
-Прикладная
математика и информатика Специализация: 010501.65- Стохастика
ВЫПУСКНАЯ
КВАЛИФИКАЦИОННАЯ РАБОТА
(Дипломная
работа)
«Системы
электронного документооборота»
Казань - 2012
ОГЛАВЛЕНИЕ
Введение
. Анализ предметной области
1.1 Модель
.2 Общая
классификация систем документооборота
2. Постановка задачи
. Функциональное описание
системы
. Логическое конструирование
. Физическое конструирование
5.1 Выбор и
обоснование инструментальных средств
.2
Использованное программное обеспечение
.3
Тестирование приложения
6. Структура и состав БД
. Пользовательский интерфейс
системы электронного документооборота HotDoc
7.1 Работа
администратора в системе HotDoc
.2 Работа
пользователя в системе HotDoc
Заключение
Список использованных
источников и литературы
Приложение 1.
Контроллер, отвечающий за аутентификацию пользователей
Приложение 2.
Контроллер, отвечающий за работу администратора
Приложение 3.
Контроллер, отвечающий за работу обычного пользователя
Приложение 4.
Служебные классы, отвечающие за рассылку оповещений на электронную почту
Приложение 5.
Описание некоторых функций из ключевых сервисов по работе с БД
Введение
Мы живем в век «Информационных технологий». Глобальный доступ к информации
стал частью современной повседневной жизни. Люди умеют измерять, обрабатывать,
распределять и передавать потоки информации разных масштабов и на огромные
расстояния. В этом нам помогают компьютеры, системы хранения, обработки и
передачи данных.
В настоящее время большинство организаций нуждается, в той или иной
степени, в хранение документов. Причём размеры данных колеблются от нескольких
мегабайтов до терабайтов. Постоянное увеличение объема накапливаемых в
организации документов приводит к постановке трудно решаемых задач, таких как
поиск документов, обеспечение конфиденциальности, сохранности, оперативный
доступ к документам. Например, поиск документов, хранящихся в бумажном виде,
занимает большое количество времени. Так же нет гарантий на сохранность
документов, поскольку большую роль играет человеческий фактор (утеря бумаг,
забывчивость сотрудников и тому подобное). В результате организация получает
информационную недостаточность, увеличиваются затраты на документооборот и тому
подобное.
Автоматизация позволяет значительно упростить поиск, доступ и хранение
документов, и, как следствие, избежать многих проблем, возникающих в процессе
обработки и ведения документооборота.
Использование системы электронного документооборота (СЭД) предоставляет
следующие преимущества перед обычным ведением документов внутри организации:
· преимущества, связанные, в основном, с сокращением затрат:
- физическое освобождение места, раннее занимаемого большим
количеством промежуточной документации;
- сокращение затрат: на копирование, на доставку информации в
бумажном виде;
- сокращение затрат на ресурсы: люди и оборудование, расходные
материалы;
- повышение продуктивности работы: быстрое выполнение работ,
увеличение общего количества выполняемых объёмов, поставленных задач, улучшение
работы с данными/записями (документами, имеющими юридические обязательства),
возможность выполнения работ с использованием новых ресурсов, подготовленных на
базе СЭД;
· преимущества, связанные с улучшениями в ключевых
бизнес-процессах:
- возможность коллективной (в команде) работы над документами
(что сложно выполнимо при бумажном делопроизводстве);
- ускорение поиска и выборки документов (по различным
атрибутам);
- повышение безопасности информации за счет того, что работа в
СЭД с незарегистрированной рабочей станции невозможна, а каждому пользователю
назначаются свои полномочия доступа к информации;
- повышение сохранности документов и удобства их хранения - так
как они хранятся в электронном виде на сервере с возможностью повседневного
резервного копирования;
- улучшение контроля за исполнением документов. [5]
Главный результат автоматизации документооборота - наведение порядка в
работе с документами, оптимизация бизнес-процессов, сокращение сроков принятия
управленческих решений и повышение эффективности работы организации в целом.
Осознав необходимость автоматизации документооборота, организация
сталкивается с проблемой выбора СЭД, то есть подходящего программного
обеспечения. На данный момент существует множество таких систем, но они имеют
ряд недостатков. Во-первых, нет единого стандарта разработки подобной
программы, а, во-вторых, нет системы, которая имела бы неоспоримые преимущества
перед всеми остальными и использовалась в большинстве организациях. Кроме того,
многие из существующих СЭД имеют трудный для понимания интерфейс и требуют
предварительного обучения для работы с ними, что для пользователей, несвободно
владеющих ПК, представляет серьезную сложность. Это же влечёт за собой затраты,
как материальные так и связанные со временем, организации на обучение
персонала.
В данной работе описана попытка разработки универсальной системы
электронного документооборота, которая имеет весь набор существенных функций и
интуитивно понятный интерфейс. СЭД может быть внедрена в различные организации.
Программа реализована в виде веб-приложения, что позволяет пользователям
работать в ней не только с рабочего места, но и везде, где есть доступ в
глобальной сети Интернет.
1.
Анализ
предметной области
1.1 Модель
Чтобы построить модель программы, необходимо как следует вникнуть в
работу организации на каком-то примере. Говоря об оптимизации бизнес-процессов
любой компании, независимо от ее размеров, выпускаемой продукции/услуг или
формы собственности, невозможно обойти стороной вопрос управления документами.
Документооборот - это жизненно важная система организации: любая деятельность
находит отражение в документах, будь то управление, финансы или производство.
Часто только оптимизация ведения документов позволяет существенно улучшить
качество и скорость процессов. Поэтому рассмотрим любую компанию с точки зрения
ведения в ней документов. Мной была изучена компания «Юла ГРУПП». Она же
является заказчиком проекта, реализуемого мной в дипломе. Дальнейшие
рассуждения будут проводиться в общем порядке - без привязки к конкретной
организации.
В любой организации может либо существовать документооборот, либо нет.
Если организация может существовать в условиях неформального управления, то,
очевидно, никакого документооборота в ней нет. Если же вводится определенный
формализм в управлении компанией и в организации всевозможных бизнес-процессов,
то рано или поздно возникает необходимость хотя бы часть управленческих
механизмов переводить на упорядоченную документационную основу (например,
регистрировать входящие и исходящие письма). В результате возникает
документооборот. Если им не управлять, то через некоторое время начинаются
такие распространённые проблемы: теряются документы, становится затруднительным
поиск нужной информации, накопление ненужных старых файлов и так далее.
Очевидно, что, наводя порядок, руководители компаний находят
организационные решения тех или иных проблем документооборота, примерно
соответствующие уровню задач каждой компании. Часто бывает, что придумывают
разумную схему размещения файлов на сервере, чтобы документы все же можно было
найти, и используют электронную почту как базовое средство передачи документа
на согласование и для контроля исполнения. Таким образом, в деятельности любой
компании можно выделить в той или иной степени формализованные и отлаженные
бизнес-процессы.
Приходит момент времени, когда компании для того, чтобы оставаться на
плаву, нужно постоянно развиваться. Даже идеально выстроенный бизнес-процесс со
временем нуждается в реорганизации. С течением времени увеличивается количество
участников, изменяются внутренние обстоятельства, внешняя среда, вследствие
чего растет количество нерегулируемых взаимоотношений и неуправляемых факторов,
возникают конфликты, снижается прибыль. Отсюда возникает необходимость перехода
на качественно новый уровень. [10] Возникают два выхода из ситуации: либо
внедрить в компании классический бумажный документооборот, со всеми его
тонкостями и недостатками, либо внедрить электронную систему, которая имеет
бесспорные преимущества. Очевидно, что в наше время «информационных технологий»
выбор обычно делается однозначно в пользу второго пути.
Как правило, руководство организации, переходящей на электронный
документооборот, в первую очередь интересует экономическая эффективность
использования СЭД. Для оценки возможного экономического эффекта от внедрения
СЭД необходимо знать, какое время сотрудники организации тратят на выполнение
повседневных, непроизводительных операций над документами. На основе этого
можно сделать выводы. Рассчитать, окупятся ли затраты на внедрение или нет.
Кроме этого, при выборе конкретной СЭД следует учитывать особенности
деятельности организации. Среди них:
· Требования по объему хранения. Если документы занимают много
«памяти» на информационных носителях, необходимо выбрать систему,
поддерживающую иерархическое структурное хранение. Этот механизм хранит
наиболее активно используемые данные на наиболее быстрых, но и наиболее дорогих
средствах хранения данных, в то время как реже используемая информация
автоматически переносится на медленные и дешевые хранилища.
· Наличие формализуемых процедур, требующих поддержки их
выполнения и автоматизации контроля (подготовки документов определенного типа,
выполнения стандартных функций организации и т. д.).
· Необходимость автоматизации административного управления
организацией. Степень сложности организационной структуры.
· Наличие территориально распределенных подразделений. Этот
фактор накладывает определенные требования к удаленному доступу, к репликации
данных и т.д.
· Наличие бумажного архива большого объема. Некоторые системы
документооборота поставляются с уже интегрированными подсистемами массового
ввода документов.
· Наличие не удовлетворяющей текущим потребностям системы
документооборота.
· Необходимость в развитой маршрутизации документов, в
управлении потоками работ (workflow managing). Как продолжение этой
необходимости - потребность в поддержке произвольных бизнес-процессов, возможно
работающих совместно с прикладными системами поддержки этих процессов.
· Требования по срокам хранения документов. При больших сроках
хранения (десятки лет) стоит серьезно подумать об организации параллельного
архива на микрофильмах.
· Требования к "открытости", расширяемости системы.
Возможность интеграции с существующими информационными системами и
использования имеющегося оборудования.
· Необходимость хранения изображений документов. Использование
в организации специфических форматов хранения документов. Необходимость
поддержки инженерных и конструкторских задач, других особенностей деятельности
предприятия.
· Необходимость развитых средств поиска информации. Полная
поддержка системой языков имеющихся в организации документов.
· Требования к безопасности (шифрование, организация доступа и
т.д.). Возможность использования уже имеющихся в информационной инфраструктуре
организации механизмов доступа в системе документооборота.
· Требования по соответствию определенным стандартам:
внутренним, отраслевым, ГОСТ, международным стандартам по контролю качества,
уровню организации хранения информации.
Основные задачи, решаемые системами электронного документооборота:
· обеспечение эффективного управления за счет автоматического
контроля выполнения, прозрачности деятельности всей организации на всех
уровнях;
· поддержка эффективного накопления, управления и доступа к
информации и знаниям. Обеспечение кадровой гибкости за счет большей
формализации деятельности каждого сотрудника и возможности хранения всей
предыстории его деятельности;
· протоколирование деятельности предприятия в целом (внутренние
служебные расследования, анализ деятельности подразделений, выявление
"горячих точек" в деятельности);
· оптимизация бизнес-процессов и автоматизация механизма их
выполнения и контроля;
· исключение или максимально возможное сокращение оборота
бумажных документов на предприятии, экономия ресурсов за счет сокращения
издержек на управление потоками документов в организации;
· исключение необходимости или существенное упрощение и
удешевление хранения бумажных документов за счет наличия оперативного
электронного архива.
При всех имеющихся плюсах СЭД, существуют и «подводные камни», с которыми
может столкнуться организация, переходящая на электронный документооборот. К
ним относятся проблемы, которые существуют практически в каждой организации, и
которые приходится решать при реализации, внедрении и сопровождении систем
электронного документооборота. Вот некоторые из них:
· консерватизм персонала, низкая образованность, нежелание
обучаться и переобучаться. Боязнь прозрачности собственной деятельности для
руководства, которая возникает после внедрения системы электронного
документооборота;
· фактор директора "советского типа" - нежелание
непосредственно работать с компьютером, просматривать и редактировать
документы;
· постоянные структурные изменения в организации, слабая
формализация бизнес-процессов;
· необходимость обеспечения юридической силы документов (после
принятия закона об электронной подписи этот фактор начнет терять свою
значимость);
· необходимость взаимодействовать с внешним
"бумажным" миром, в особенности, если это касается параллельных
структур в ассоциированных организациях или ведомствах, с которыми идет
постоянная работа;
· кроме перечисленных, существуют проблемы, специфические для
определенных типов организаций;
1.2 Общая классификация систем документооборота
Любая система документооборота может содержать элементы каждой из
приведенных ниже категорий, но большинство из них имеют конкретную ориентацию в
одной из областей, связанную в первую очередь с позиционированием продукта.
· Системы с развитыми средствами хранения и поиска информации
(электронные архивы - ЭА). Электронный архив - это частный случай системы
документооборота, ориентированный на эффективное хранение и поиск информации.
Некоторые системы особенно выделяются за счет развитых средств полнотекстового
поиска: нечеткий поиск, смысловой поиск и т. д., другие - за счет эффективной
организации хранения.
· Системы с развитыми средствами управления потоком работ. Эти
системы в основном рассчитаны на обеспечение движения неких объектов по заранее
заданным маршрутам. На каждом этапе объект может меняться, поэтому его называют
общим словом "работа". К работам могут быть привязаны документы, но
не документы являются базовым объектом этих систем. С помощью таких систем
можно организовать определенные работы, для которых заранее известны и могут
быть прописаны все этапы.
· Системы, ориентированные на поддержку управления организацией
и накопление знаний. Эти "гибридные" системы, которые обычно сочетают
в себе элементы двух предыдущих. При этом базовым понятием в системе может быть
как сам документ, так и задание, которое нужно выполнить. Для управления
организацией нужна как "жесткая", так и "свободная"
маршрутизация, когда маршрут движения документа назначает руководитель ("расписывает"
входящий документ), поэтому обе технологии в том или ином виде могут
присутствовать в таких системах. Эти системы активно используются в
государственных структурах управления, в офисах крупных компаний, которые
отличаются развитой иерархией, имеют определенные правила и процедуры движения
документов. При этом сотрудники коллективно создают документы, готовят и
принимают решения, исполняют или контролируют их исполнение.
· Системы, ориентированные на поддержку совместной работы
(collaboration). Это новое веяние в области систем документооборота, связанное
с пониманием изменчивости рыночных условий в современном мире и с
необходимостью иметь для быстрого движения "только самое нужное", без
лишнего, очень полезного, но тяжелого балласта. Такие системы, в противоположность
предыдущим, не включают понятия иерархии в организации, не заботятся о
какой-либо формализации потока работ. Их задача - обеспечить совместную работу
людей в организации, даже если они разделены территориально, и сохранить
результаты этой работы. Обычно реализованы в концепции "порталов".
Они предоставляют сервисы хранения и публикации документов в интранет, поиска
информации, обсуждения, средства назначения встреч (как реальных, так и
виртуальных). Такие системы находят заказчиков среди быстро развивающихся
коммерческих компаний, рабочих групп в крупных фирмах и государственных
структурах.
· Системы, имеющие развитые дополнительные сервисы. Например,
сервис управления связями с клиентами (CRM - Customer Relation Management),
управления проектами, биллинга, электронной почты и пр. [6]
Безусловно, для большой организации со специфичными только для нее
бизнес-процессами трудно подобрать СЭД, которая бы удовлетворяла всем
потребностям этой организации. Но, в то же время, она может позволить себе
заказать разработку такой системы, которая будет ориентирована на использование
именно в этой организации.
Другое дело, маленькие организации, которых намного больше. Для того
чтобы заказать систему, у них нет материальных возможностей. Можно найти
платную систему, которая им подходит, но, если система действительно хорошая,
то и стоит она немало. Если рассматривать такие организации, как учебные
заведения, больницы и другие подобные заведения, то, скорее всего, они
откажутся от покупки дорогой системы по причине небольшого бюджета. Что
касается бесплатных СЭД, то, во-первых, таких очень мало, во-вторых,
большинство из них слишком примитивные, имеют недостаточный набор функций и
неудобный интерфейс.
Поэтому для таких организаций и возникает проблема: «хочется перейти на
новый уровень, автоматизировать документооборот в организации, но нет
подходящей системы, которая удовлетворяла и по цене и по качеству».
В данной работе рассматривается эта проблема и предлагается ее решение.
2.
Постановка задачи
Необходимо разработать универсальную систему электронного
документооборота, которая позволит облегчить и ускорить работу с документами.
СЭД должна удовлетворять следующим требованиям:
· в системе должно быть реализовано разграничение прав доступа
пользователей. Необходимо реализовать две роли: «администратор» и «обычный
пользователь».
· доступ к системе должны иметь только пользователи,
зарегистрированные администратором системы;
· необходимо обеспечить мультиплатформенность приложения;
· приложение не должно быть ориентировано на конкретную
специализацию предприятий; необходимо предусмотреть возможность администратора
настраивать систему под конкретную организацию;
· администратор должен иметь возможность использования
следующих функций: добавление/удаление/редактирование пользователей,
добавление/удаление/редактирование групп, добавление/удаление каталогов,
удаление файлов;
· документы должны храниться в едином месте;
· каждый документ должен хранить метаданные;
· необходимо реализовать механизм ведения версий документов,
который позволяет хранить историю изменения документов;
· пользователи должны иметь следующие возможности работы с
файлами: добавить/удалить файл, задать срок хранения файла в системе, добавить
комментарий к файлу, выбрать действия других пользователей над файлом, задавать
область видимости файлов и отправлять оповещения пользователям на электронную
почту;
· возможна реализация хранения шаблонов документов, которые
часто используются в организации, с возможностью доступа к ним всех
пользователей системы;
· желательно реализовать эффективную систему поиска документа,
позволяющую находить документ, обладая минимальной информацией о нем;
· дизайн системы должен быть ненавязчивым; система должна быть
удобной для использования, не требующей специального обучения для работы с ней.
3.
Функциональное описание системы
Пользовательская модель (архитектура) - представление о том, какие
функции будет выполнять система, как будет взаимодействовать с пользователем.
Это взгляд на систему с точки зрения пользователя.
Согласно технологии Microsoft Solution
Framework, процесс проектирования начинается с
методичного анализа пользователей, которые определяют различные типы
пользователей и их рабочие функции.
Затем формируется набор сценариев использования, где каждый из них
разбивается на последовательность специфических действий, называемых примерами
использования.
Web -
приложение «HotDoc» предусматривает два типа
пользователей системы электронного документооборота:
· обычный пользователь системы - каждый сотрудник учреждения;
· администратор - избранный человек, наделенный особыми
полномочиями (правами) в системе.
Общими для обоих типов пользователей являются следующие функции:
· Авторизация пользователя: после введения верных логина и
пароля, пользователь авторизуется в системе и может выполнять определенные
действиями в соответствии со своими правами. В качестве логина пользователя
рассматривается e-mail, поскольку его удобно использовать в
качестве рассылки важной информации.
· Просмотр содержимого каталогов: выбрав в дереве определенную
папку, пользователь может просматривать ее содержимое в соответствии с его
правами доступа к файлам. Он видит только те файлы, которые ему доступны для
просмотра.
· Просмотр информации о файле: пользователь может просмотреть
следующую информацию о файле - его название, дату добавления, о том, какой
пользователь его создал, его размере, сроке хранения, комментарии.
· Удаление файла: при просмотре файла пользователь имеет
возможность его удалить. Вместе с файлом удаляются и все его версии Файл может
удалить только его создатель или администратор.
· Скачивание файла: пользователь может скачать файл, доступный
ему для просмотра. Для этого он должен выбрать место (папку) для загрузки
файла.
· Просмотр доступа к файлу: администратор и пользователи, для
которые видят файл, могут просматривать списки пользователей и групп, для
которых доступен файл.
· Просмотр заданий к файлу: при выборе определенного файла
пользователь может просмотреть все задания, которые были заданы к данному файлу
(текст задания, кем добавлено, исполнитель, отметка о выполнения задания).
· Просмотр версий файла: в случае изменения добавленного файла
образуются новые версии того же файла, которые доступны для администратора и
пользователей, наделенных правами доступа к файлу. Пользователь может
просмотреть список версий к файлу, в котором указаны номер версии, файл -
родитель, дата добавления, комментарий и пользователь, добавивший версию.
Считается, что версия №1 для файла - это он сам, поэтому в списке версии
отображаются все, начиная со второй.
· Скачивание версии файла: пользователь может скачать версию
файла, доступного ему для просмотра, выбрав место для сохранения.
· Удаление версий к файлу: существует две возможности удалить
версии:
- Удалить выбранную версию из списка версий. В этом случае все
версии файла, следующие за удаленной должны быть перенумерованы.
- Удалить все версии файла, кроме выбранной из списка версий. В
этом случае все версии файла, помимо указанной, удаляются, а оставшаяся версия
становится второй по номеру.
Версии файла может удалять администратор или любой пользователь системы,
имеющий права доступа к файлу с указанными версиями.
· Просмотр пользователей определенной группы: пользователь
может просматривать списки пользователей, входящих в текущую группу.
· Просмотр списка пользователей: можно увидеть список всех
пользователей системы с указанием ФИО, должности и адреса электронной почты.
· Просмотр списка групп: пользователь может просматривать
список групп, существующих в системе.
Для пользователей, авторизованных в роли администратора, предусмотрены
следующие сценарии использования:
· Добавить пользователя: администратор может добавить
пользователя, введя его фамилию, имя, отчество, должность, адрес электронной
почты, логин и пароль.
· Удалить пользователя: администратор может сделать пометку о
том, что пользователь удален. В этом случае, пользователь не отображается в
списках.
· Восстановить пользователя: администратор может восстановить
пользователя, ранее зарегистрированного в системе.
· Редактировать информацию о пользователе: администратор может
изменять следующую информацию о пользователе - ФИО, должность, адрес
электронной почты, логин и пароль.
· Просмотреть группы пользователя: администратор может
просматривать группы, в которых состоит пользователь.
· Добавить папку: администратор, находясь в определенном
каталоге, может добавить в него новую папку.
· Удалить папку: администратор имеет возможность удаления
папок. При этом вместе папкой удаляются и все вложенные в нее файлы и каталоги.
· Добавить задание: администратор может добавить новое задание,
которое будет использоваться при определений пользователями заданий к файлу для
исполнения другими пользователями.
· Удалить задание: администратор может удалить задание из
списка назначаемых заданий, в связи с тем, что оно потеряло свою актуальность.
В этом случае данное задание, будет сохраняться лишь для файлов, сохраненных в
системе.
· Просмотр списка заданий: администратор может просматривать
список добавленных им заданий, которые будут использованы в дальнейшем при
назначении пользователями заданий к файлу.
· Создать группу: администратор имеет возможность создания
группы пользователей, указав ее название.
· Удалить группу: администратор имеет возможность удалить
группу.
· Добавить пользователя в группу: администратор может добавлять
в группу пользователей, зарегистрированных в системе.
· Удалить пользователя из группы: администратор может удалять
пользователя из определенной группы.
Для пользователей, авторизованных в роли обычных сотрудников учреждения,
сценарии использования, отличные от администратора, следующие:
· Добавление новой версии к файлу: для добавления новой версии
к файлу пользователь должен ввести название файла, комментарий, срок хранения и
выбрать файл для загрузки. Поля номер версии, дата добавления и создатель
формируются автоматически.
· Добавление файла: для добавления файла пользователь должен
ввести название файла, комментарий, срок хранения и выбрать файл для загрузки.
Поля дата добавления, размер файла, создатель генерируются автоматически. По
умолчанию, файл доступен всем пользователям системы
· Просмотр добавленных файлов: пользователь может просмотреть
файлы, которые он добавил, при этом отобразиться список -таблица с указанием
названия, даты добавления, размера, комментариев и срока хранения каждого файла
с возможностью просмотра о них информации.
· Назначение задания к файлу: пользователь может установить
задание к файлу, выбрав тип задания и исполнителя. Поля пользователь,
добавивший задание, очередность выполнения и статус о выполнении задания
автоматически генерируются системой. По умолчанию задание считается
невыполненным.
· Редактирование доступа к файлу: для каждого добавленного
файла пользователь может изменять списки доступа к файлу по группам и
пользователям, выбрав из списка те группы и тех пользователей, которым будет
виден файл. По умолчанию файл доступен всем пользователям системы.
· Просмотр заданий пользователя: отображаются все задания к
файлам, назначенные для исполнения данным пользователем. По каждому заданию
можно увидеть следующую информацию: текст задания, к какому файлу оно
добавлено, кем добавлено, и отметку о выполнении задания.
· Просмотр добавленных заданий: отображаются все задания к
файлам, который пользователь назначил другим. По каждому заданию можно увидеть
следующую информацию: текст задания, к какому файлу оно добавлено, исполнителя
и отметку о выполнении задания.
· Отметка о выполнении задания: пользователь, добавивший
задание к файлу или тот, кто получил задание, имеет возможность поставить
отметку о выполнении задания по окончанию проделанных работ. В случае
положительной отметки («задание выполнено») пользователь, назначивший текущее
задание получает на e-mail сообщение о том, что задание
выполнено, а в списке его задания для выполнения также отображается отметка о
выполнении задания.
4.
Логическое конструирование
Для описания предметной области, с учетом особенностей представления
данных в разрабатываемой системе, созданы следующие основные сущности:
· администратор
· пользователь
· группа
· каталог
· содержимое каталога
· файл
· информация о файле
· задание
· задание к файлу
· доступ к файлу
· версия
· шаблон
В результате анализа пользовательской архитектуры выделены следующие
группы задач (сервисы), необходимые для реализации всех функций, описанных в
пользовательской архитектуре:
· сервис для работы с базой данных
· сервис для работы с пользователями и группами
· сервис для работы с файлами и каталогами
· сервис для работы с заданиями
Содержание сервисов:
1) Сервис для работы с базой данных содержит основные
функции:
· подключение к БД - создает устойчивое подключение к базе
данных;
· создание таблиц в БД - создает таблицы в базе данных,
добавляет необходимые первоначальные данные в таблицы (создает администратора и
корневой каталог).
2) Сервис для работы с пользователями и группами содержит
реализацию следующих функций:
· аутентификация пользователей и администраторов - проверяет,
есть ли в БД пользователь или администратор с введенным логином и паролем; если
такой пользователь или администратор имеется, разрешает доступ к системе;
· получить информацию о пользователе;
· получить список пользователей - для отображения всех
пользователей системы;
· получить список групп - для отображения информации о группах
пользователей системы;
· получить список групп, в которых состоит пользователь;
· получить список пользователей из группы;
· добавить/ редактировать/ удалить пользователя - функции,
доступные только администратору системы;
· восстановить пользователя - удаленный из системы пользователь
может быть восстановлен администратором;
· добавить/удалить группу - функции, доступные только
администратору системы;
· добавить/удалить пользователя в группу/из группы - функции,
доступные только администратору системы.
Кроме основных функций сервис содержит следующие служебные функции:
· проверка логина на соответствие адресу электронной почты -
это позволяет отправлять пользователю оповещения на электронную почту;
· проверка существования логина - это позволяет наличие
уникального идентификатора пользователя системы;
· проверка существования группы с введенным именем - позволяет
обеспечить уникальность имени группы;
· получение различных атрибутов сущностей.
3) Сервис для работы с файлами и каталогами содержит
следующие основные функции:
· добавить/удалить каталог - доступны только администратору;
· отобразить содержимое каталога - служит для отображения
каталогов и файлов, находящихся в выбранном каталоге, к которым пользователь
имеет доступ; администратору доступны все файлы системы;
· добавить файл - ввод данных, описывающих файл и загрузка
файла в файловую систему сервера;
· удалить файл - функция доступна администратору и
пользователю, который добавил данный файл; файл удаляется из БД и из файловой
системы; вместе с файлом удаляются все его версии;
· получить информацию о файле - необходимо для вывода описания
файла и пользователя, который добавил данный файл;
· разрешить/запретить доступ всех пользователей к файлу -
доступны только автору файла;
· разрешить/запретить группе доступ к файлу - доступны только
автору файла;
· разрешить/запретить доступ пользователя к файлу - доступны
только автору файла;
· получить списки групп и пользователей, имеющих доступ к файлу
- доступна администратору системы и автору файла;
· добавить/удалить версию файла - доступны администратору и
всем пользователям, имеющим доступ к файлу;
· удалить все версии файла - удаляются все версии выбранного
файла, сам файл не удаляется;
· удалить все версии файла, кроме одной - необходима в случае,
когда нужно оставить лишь одну версию файла (например, последнюю,
окончательную), а все остальные удалить; сам файл не удаляется;
· получить версии файла - для отображения информации о версиях
выбранного файла.
Кроме основных функций сервис содержит следующие служебные функции:
· проверка существования имени каталога - позволяет сохранить
уникальность имен каталогов, расположенных на одном уровне;
· получение путь до файла в файловой системе - необходимо для
скачивания, удаления файла, для добавления версий к файлу;
· получить текущее количество версий файла;
· получить общее количество версий файла;
· получить путь до версии файла в файловой системе - необходимо
для скачивания, удаления версий.
4) Сервис для работы с заданиями содержит функции:
· добавить/удалить задание для работы с файлами - задания,
которые будут добавляться к файлам; доступна только администратору системы;
· отобразить задания для работы с файлами - для выбора задания
к файлу либо для просмотра заданий администратором;
· добавить/удалить задание к файлу - при добавлении задания к
файлу, адресату отправляется оповещение на электронную почту;
· получить задания к файлу - отобразить список всех заданий к
данному файлу;
· получить задания, адресованные пользователю - пользователь
системы может просмотреть задания, адресованные ему;
· получить задания, добавленные пользователем - пользователь
системы может просмотреть информацию о заданиях, которые он добавил сам;
· проверить, выполнено ли задание;
· сообщить о выполнении/невыполнении задания - адресат или
автор файла могут подтвердить выполнение задания либо назначить задание еще раз
с повторным отправлением оповещения на почту;
5.
Физическое конструирование
5.1 Выбор и обоснование инструментальных средств
При выборе технологии разработки системы были рассмотрены следующие
требования:
1) Система должна быть мультиплатформенной. Чтобы учесть это
требование, необходимо использовать мультиплатформенный язык программирования.
Данная система разрабатывалась на мультиплатформенном языке Java.
2) Система должна быть реализована в виде веб-приложения. Это дает
следующие преимущества:
· реализация по модели клиент-сервер дает сосредоточение и
централизацию информации;
· веб-приложения не требуют процесса ручной инсталляции, они
запускаются и устанавливаются в автоматическом режиме;
· пользователям для работы необходимо наличие только лишь
браузера;
· возможность удаленной работы в сети.
На основе этого требования была выбрана технология Java Server-Side -
технология проектирования и разработки (Java EE, Servlets/JSP).
Для реализации веб-приложения в качестве шаблона проектирования
использовалась модель MVC
(Model View Controller).
Стандартная схема архитектуры «Модель-Вид-Контроллер» изображена на
следующем рисунке:
В этом шаблоне есть три основных компонента: Модель, Представление и
Контроллер.
Представление (вид) отвечает за отображение информации, поступающей из
системы или в систему. [7]
Модель является «сутью» системы и отвечает за непосредственные алгоритмы,
расчёты и тому подобное внутреннее устройство системы.
Контроллер является связующим звеном между «представлением» и «моделью»
системы, посредством которого и существует возможность произвести разделение
между ними. Контроллер получает данные от пользователя и передаёт их в «модель».
Кроме того, он получает сообщения от модели, и передаёт их в «представление».
При разработке системы в качестве модели использовались сущности и
сервисы, описанные на этапе логического проектирования. Функции, описанные в
сервисах, были реализованы с помощью запросов к базе данных на языке sql и обращений к файловой системе, а
так же содержат реализацию необходимых алгоритмов.
Для организации связи между моделью системы и представлением были
разработаны сервлеты. Сервлет является Java-программой, выполняющейся на
стороне сервера и расширяющей функциональные возможности сервера. Сервлет
взаимодействует с клиентами посредством принципа запрос-ответ. Основная задача
технологии сервлетов - обеспечить доступ для пользователей Интернета или
корпоративных сетей к данным и ресурсам на сервере, используя стандартные
средства Web (любой браузер, HTML, HTTP), не требуя установки никакого
специального ПО на стороне клиента. Вся обработка данных перенесена на сервер
или несколько серверов. Клиенту в итоге возвращается Web-страница с
запрашиваемыми данными.
Сервлеты в совокупности составляют контроллер. Аналогично JSP-страницам, сервлеты были разделены
на две группы: отвечающие за работу обычного пользователя и администратора. В
каждой из групп разбиение на сервлеты было реализовано по такому же принципу,
как разбиение на сервисы на этапе логического проектирования.
Таким образом, были реализованы следующие сервлеты:
1. Для пользователей:
· MainPageServlet - отвечает за главную страницу (страницу, на
которую пользователь попадает после аутентификации);
· UserGroupServlet - отвечает за данные, связанные с
пользователями и группами (просмотр групп, просмотр данных о пользователях и
другие);
· FileFolderTaskServlet - отвечает за работу с каталогами,
файлами, версиями и заданиями к файлам (добавление и удалений файлов и версий,
добавление и удаление заданий, просмотр информации о файле и т.д.);
· Upload - необходим для загрузки файлов в файловую систему;
· Download - необходим для скачивания файлов из файловой
системы.
2. Для администраторов:
· AdminMainPageServlet - отвечает за главную страницу
администратора;
· AdminUserGroupServlet - отвечает за данные, связанные с
пользователями и группами (просмотр групп, просмотр данных о пользователях,
удаление/добавление групп и пользователей, редактирование пользователей и
другие);
· AdminFileFolderTaskServlet - отвечает за работу с
каталогами, файлами, версиями и заданиями к файлам (добавление и удалений
каталогов, удаление файлов и версий, просмотр и удаление заданий, просмотр информации
о файле и т.д.);
· AdminDownload - необходим для скачивания файлов из файловой
системы;
Кроме перечисленных сервлетов, реализован сервлет AuthServlet, отвечающий
за аутентификацию, который является общим для пользователей и администраторов,
а также два служебных класса MailLogger и SMTPAuthenticator, необходимых для
отправки сообщений на электронную почту.
Для реализации представления использовалась технология JSP - она является обобщением технологии
сервлетов. Эта технология позволяет комбинировать HTML-код Web-страницы c
фрагментами Java-кода в одном документе. Когда клиент делает запрос к JSP
странице, Web-сервер перенаправляет этот запрос к соответствующему сервлету,
который выполняет всю работу и генерирует ответ, который отправляет Web-серверу,
а Web-сервер - клиенту.
Были разработаны JSP-страницы,
каждая из которых отвечает за определенную страницу, отображающуюся в окне
браузера. Так как система предусматривает две роли пользователей (обычный
пользователь и администратор), для каждой из ролей были созданы отдельные JSP-страницы.
Для
удобства работы пользователей с помощью технологии AJAX было
реализовано отображение дерева каталогов. AJAX - подход к построению
интерактивных пользовательских интерфейсов
<#"588244.files/image002.gif">
7.1 Работа администратора в системе HotDoc
После аутентификации администратор переходит на главную страницу, с
возможностью выбора из главного меню вкладок работы с каталогами,
пользователями, группами, заданиями и выхода из системы.
Для того чтобы добавить новый каталог, необходимо, после нажатия в
главном меню вкладки «Добавить каталог», в дереве каталогов выбрать его
местоположение и ввести название.
При удалении каталога следует выбрать его в дереве каталогов и нажать
ссылку в главном меню «Удалить каталог». При этом выйдет запрос о том,
действительно ли Вы хотите удалить каталог?
Для работы с информацией о пользователях системы, администратору
необходимо выбрать в главном меню вкладку «Пользователи». Отобразится список
пользователей системы с возможностью их удаления, редактирования и просмотра групп,
в которых они состоят, а также добавления новых пользователей.
Администратор имеет возможность удалить сотрудника, в этом случае при
переходе по ссылке «Удалить» напротив пользователя в графе статус появляется пометка
«Удален», а вместо ссылки «Удалить», появляется ссылка «Восстановить». Этот
пользователь не отображается в системе, но в случае его возвращения на работу,
он может быть легко восстановлен.
Также есть возможность просмотра групп, в которых состоит пользователь
после перехода по ссылке «Просмотр групп».
При изменении данных о сотруднике, администратор может внести коррективы
в информацию о пользователе, либо изменить логин и пароль.
При добавлении нового пользователя, переходу по ссылке «Добавить нового
пользователя», администратор должен ввести ФИО сотрудника, его должность, e-mail, который является логином для вхождения в систему, и
пароль.
В главном меню есть вкладка «Группы», которая отображает список
существующих групп в системе, с возможностью их удаления, редактирования и
добавления новых.
Для того чтобы создать новую группу, нужно перейти по ссылке «Создать
группу» и ввести ее название.
Для редактирования группы необходимо щелкнуть по ее названию, далее
отобразится список состоящих в группе пользователей с возможностью добавления/удаления
новых.
При выборе вкладки «Задания» из главного меню отображается список
заданий, которые пользователи смогут в дальнейшем назначать для выполнения
пользователями к определенным файлам. Администратор может добавлять новые задания
и удалять заданные.
После нажатия ссылки «Добавить новое задание», администратор должен
ввести текст задания.
.2 Работа пользователя в системе HotDoc
После успешной авторизации пользователь переходит на главную страницу,
где в главном меню содержатся вкладки для работы с файлами, заданиями,
просмотра пользователей и групп, выхода из системы. На главной странице
размещаются объявления для всех пользователей системы.
При необходимости добавления нового файла пользователь должен выбрать
вкладку «Создать документ», в дереве каталогов выбрать папку, куда следует его
загрузить, ввести название файла, комментарий, срок хранения и выбрать файл для
загрузки.
Все добавленные файлы отображаются во вкладке «Мои файлы».
После выбора файла во вкладке «Мои файлы» либо в дереве каталогов слева,
отображается информация о файле. Пользователь может просматривать добавленные
им самим файлы и те файлы, которые ему доступны для просмотра.
Пользователь может просмотреть задания к файлу, скачать его, удалить,
просмотреть и редактировать доступ к файлу, просмотреть и добавить новую версию
файла. Ссылка «Удалить» отображается только для автора файла, возможность
редактирования доступа также имеет только автор.
Поскольку документ в ходе выполнения заданий изменяется, любой
пользователь, имеющий доступ к нему, может загружать его новые версии. Версии
файла можно удалять по одной, либо наоборот, оставить только одну,
окончательную версию, выбрав в колонке «Удалить все кроме (№)» необходимую
версию и нажав кнопку «ОК».
Для добавления новой версии во вкладке «Версии»->«Добавить версию»
следует ввести комментарий, срок хранения и выбрать файл для загрузки.
Автор файла может редактировать доступ к файлу. По умолчанию файл
доступен всем пользователям системы.
При выборе доступности файла определенным пользователям появляется окно
выбора групп и пользователей, для которых доступен файл.
Во вкладке доступ к файлу отображается список пользователей и групп,
которые могут просматривать файл, добавлять задания и версии.
Вкладка «Задания» из главного меню отображает задания, которые были
назначены к этому файлу. Здесь можно увидеть текст задания, очередность
выполнения, от кого и кому оно адресовано, выполнено ли. Можно удалить задание
к файлу.
При просмотре заданий к файлу, пользователь имеет возможность добавить
новое задание, выбрав текст задания и исполнителя. После добавления задания к
файлу, адресату отправляется письмо на почту с тем, что ему добавлено задание к
исполнению.
Вкладка «Мои задания» из главного меню отображает список заданий,
адресованных авторизованному пользователю. Здесь имеется возможность поставить
отметку о выполнении задания.
Вкладка «Задания» из главного меню отображает список заданий, которые
были назначены текущим пользователям для исполнения другими. После проверки
выполнения задания пользователь может поставить отметку о том, что оно выполнено.
Вкладка «Пользователи» из главного меню отображает список пользователей,
зарегистрированных в системе.
Вкладка «Группы» из главного меню системы отображает список групп.
Щелкнув по названию группы, можно просмотреть ее состав:
Перейдя по ссылке с ФИО пользователя, можно перейти на страницу с
информацией о нем.
Заключение
Сегодня, в 21 веке - веке информатизации, очень важно поспевать за
изменениями в сфере информационных технологий. Чтобы быть конкурентоспособной
организацией, важно оптимизировать свои бизнес-процессы. Одним из решений в
этом направлении может стать переход на систему электронного документооборота.
Возникает проблема в подборе подходящего программного обеспечения. Найти
систему, удовлетворяющую требованиям организации по функциональности и в то же
время оптимальную по стоимости достаточно сложно. Существующие примеры являются
либо слишком примитивными, либо очень дорогими. Особенно остро эта проблема
прослеживается для организаций с небольшим бюджетом, не имеющих достаточных
средств, чтобы заказать разработку подобной системы.
В данной работе представлено решение этой проблемы. Разработана система
электронного документооборота, отвечающая заявленным требованиям.
Web -
приложение написано на мультиплатформенном языке программирования Java. Оно имеет интуитивно понятный
интерфейс.
Система электронного документооборота HotDoc предусматривает два режима работы: администратора и
обычного пользователя. Реализованы возможности работы с документами, их
загрузка и редактирование, добавление новых версий и назначение заданий для
выполнения пользователями, предусмотрена работа с группами пользователей.
При работе с документами реализована возможность редактирования доступа к
файлу. Пользователь, добавивший документ, может задать область видимости,
указав группы и пользователей, которым будет доступен файл. Лица из этого
списка могут просматривать файл, скачивать его, добавлять к нему задания и
редактировать версии файла (добавлять новые, удалять существующие).
Кроме того, в системе реализована рассылка оповещений. При добавлении
задания определенному пользователю, он получает оповещение об этом на почту.
Созданное приложение легко в освоении, удобно в использовании и
оперативном получении информации.
Прототип системы документооборота, организованный по модульной
архитектуре, может быть легко доработан до коммерческого предложения.
Данная работа помимо этого подразумевала учебную цель: ознакомление с
Java Server-Side - технологиями. При разработке системы были использованы
современные информационные технологии: JavaEE - JSP, Servlets, JSP, JDBC;
технология AJAX. Цель была достигнута.
Система электронного документооборота HotDoc может иметь свое практическое применение, как в
средних, так и в крупных организациях, где требуется ведение большого объема
документов.
Список использованных источников и
литературы
1. Дж.
Боуман, С. Эмерсон, М. Дарновски Практическое руководство по SQL, 4-е изд.:
Пер.с англ. - М.: Издательский дом "Вильямс", 2002
2. Философия
Java. Библиотека программиста. 4-е изд. - СПб.: Питер, 2009
. Java2.
Библиотека профессионала, том 1. Основы, 7-е изд.: Пер. с англ. - М.:
Издательский дом "Вильямс", 2007
. Java2.
Библиотека профессионала, том 2. Тонкости программирования, 7-е изд.: Пер. с
англ. - М.: Издательский дом "Вильямс", 2007
5. <http://www.bishelp.ru/uprbiz/avto/document.php>
. <http://www.dvgu.ru/meteo/intra/ElectronDocument.htm>
. <http://chtivo.webhost.ru/articles/mvc.php>
. <http://www.webmascon.com/topics/development/22a.scenarios.asp>
. <http://www.docflow.ru/analitics/detail.php?ID=19416>
. http://ru.wikipedia.org/wiki/AJAX
ПРИЛОЖЕНИЕ 1
Контроллер, отвечающий за аутентификацию
AuthServlet
package ru.ksu.eldoc.web;
import ru.ksu.eldoc.services.impl.UserGroupServiceImpl;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;
class AuthServlet extends HttpServlet {String url;String
driver;String user;String password;
// actionsstatic final String AUTH = "auth";static
final String LOGIN_PAGE = "loginPage";static final String MESSAGE =
"message";static final String LOGIN = "login";static final
String PASSWORD = "password";static final String ADMIN =
"admin";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");
}
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");(action == null) action =
LOGIN_PAGE;message = "";{(action.equals(LOGIN_PAGE)) {requestDispatcher
=
request.getRequestDispatcher("/WEB-INF/jsp/loginPage.jsp");.include(request,
response);
}(Exception e) {= e.getMessage();= "loginPage
error";.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();message
= "";(action != null) {{ugsi = new UserGroupServiceImpl(url, driver,
user, password);checkLogin = request.getParameter(LOGIN);checkPassword =
request.getParameter(PASSWORD);admin;ex = ugsi.authent(checkLogin, checkPassword);(ex)
{.removeAttribute(LOGIN);.removeAttribute(PASSWORD);.removeAttribute(ADMIN);.setAttribute(LOGIN,
checkLogin);.setAttribute(PASSWORD, checkPassword);= false;.setAttribute(ADMIN,
admin);.sendRedirect(request.getContextPath() + "/main");
} else {= ugsi.adminAuthent(checkLogin, checkPassword);(ex)
{.removeAttribute(LOGIN);.removeAttribute(PASSWORD);.removeAttribute(ADMIN);.setAttribute(LOGIN,
checkLogin);.setAttribute(PASSWORD, checkPassword);= true;.setAttribute(ADMIN,
admin);.sendRedirect(request.getContextPath() + "/admin_main");
} else {= "wrong login or
password!!";.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}(Exception e) {= e.getMessage() +
"kjkj";.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}
}
ПРИЛОЖЕНИЕ 2
Контроллер, отвечающий за работу администратора
AdminMainPageServlet
package ru.ksu.eldoc.web;
import
ru.ksu.eldoc.objects.*;ru.ksu.eldoc.services.impl.FileFolderServiceImpl;ru.ksu.eldoc.services.impl.UserGroupServiceImpl;ru.ksu.eldoc.services.impl.TasksServiceImpl;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;java.io.PrintWriter;java.util.List;java.util.ArrayList;
com.sun.jmx.snmp.tasks.Task;
class AdminMainPageServlet extends HttpServlet {String
url;String driver;String user;String password;
// actionsstatic final String MAIN_PAGE =
"mainPage";
// parametersstatic final String LOGIN =
"login";static final String PASSWORD = "password";static
final String MESSAGE = "message";static final String USURNAME =
"uSurname";static final String UNAME = "uName";static final
String PATRONYMIC = "patronymic";static final String JOB =
"job";static final String FOLDERS = "folders";static final
String NEW_DOCUMENT = "newDocument";static final String SHOW_TASKS =
"showTasks";static final String TASKS = "my_Tasks";static
final String NEW_TASK = "newTask";static final String TASK_ID =
"taskId";static final String CREATE_NEW_TASK =
"createNewTask";static final String TASK_TEXT =
"taskText";static final String SHOW_FILE_ACCESS =
"showFileAccess";static final String FILE_ACCESS =
"fileAccess";static final String FOLDER_CONTENTS =
"folderContents";static final String FOLDER_ID =
"folderId";static final String FROM_FOLDER =
"fromFolder";static final String FROM_FOLDER_ID =
"fromFolderId";static final String DELETE_FOLDER =
"deleteFolder";static final String DELETE_TASK =
"deleteTask";static final String DELETE_FILE =
"deleteFile";static final String FILE_ID = "fileId";static
final String USERS = "users";static final String USER =
"user";static final String USER_ID = "userId";static final
String USER_LOGIN = "userLogin";static final String USERS_LIST =
"usersList";static final String EDIT_USER = "editUser";static
final String DELETE_USER = "deleteUser";
static final String USER_EDIT = "userEdit";static
final String USER_SURNAME = "userSurname";static final String
USER_NAME = "userName";static final String USER_PATRONYMIC =
"userPatronymic";static final String USER_JOB =
"userJob";static final String USER_EMAIL =
"userEmail";static final String USER_PASSWORD =
"userPassword";static final String EXIT = "exit";
static final String FILE_INFO = "fileInfo";static
final String FILEINFO = "fileinfo";static final String FOLDER =
"folder";static final String VERSION = "version";static
final String VERSION_NUMBER = "versionNumber";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");
}
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();
(action == null) action = MAIN_PAGE;message = "";{
login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);
(action != null) {
(login == null).sendRedirect(request.getContextPath() +
"/auth");{ugsi = new UserGroupServiceImpl(url, driver, user,
password);ffsi = new FileFolderServiceImpl(url, driver, user, password);tsi =
new TasksServiceImpl(url, driver, user, password);a = new Admin(login,
password);.setAttribute(USURNAME, a.getLogin());(action.equals(MAIN_PAGE))
{requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/admin/adminMainPage.jsp");.include(request,
response);
} else if (action.equals(EXIT))
{.removeAttribute(LOGIN);.removeAttribute(PASSWORD);.sendRedirect(request.getContextPath()
+ "/auth");
}
}
}
}
(Exception e) {= e.getMessage();.setAttribute(MESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}
ru.ksu.eldoc.web;
ru.ksu.eldoc.services.impl.UserGroupServiceImpl;ru.ksu.eldoc.objects.Admin;ru.ksu.eldoc.objects.User;ru.ksu.eldoc.objects.Group;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;java.util.List;
class AdminUserGroupServlet extends HttpServlet {String
url;String driver;String user;String password;
static final String MAIN_PAGE = "mainPage";static
final String MESSAGE = "message";static final String LOGIN =
"login";static final String PASSWORD = "password";static
final String USURNAME = "uSurname";static final String USERS =
"users";static final String USER = "user";static final
String USER_ID = "userId";static final String USER_INFO = "userInfo";static
final String USER_LOGIN = "userLogin";static final String USERS_LIST
= "usersList";static final String EDIT_USER =
"editUser";static final String DELETE_USER =
"deleteUser";static final String RESTORE_USER =
"restoreUser";static final String USER_EDIT =
"userEdit";static final String USER_SURNAME =
"userSurname";static final String USER_NAME =
"userName";static final String USER_PATRONYMIC =
"userPatronymic";static final String USER_JOB =
"userJob";static final String USER_EMAIL = "userEmail";static
final String USER_PASSWORD = "userPassword";static final String
NEW_USER = "newUser";static final String CREATE_NEW_USER =
"createNewUser";
static final String GROUP = "group";static final
String GROUP_NAME = "groupName";static final String CREATE_NEW_GROUP
= "createNewGroup";static final String GROUPS =
"groups";static final String GROUPSLIST =
"groupsList";static final String GROUP_LIST =
"groupList";static final String NEW_GROUP =
"newGroup";static final String USERS_IN_GROUP =
"usersInGroup";static final String DELETE_GROUP =
"deleteGroup";static final String GROUP_ID =
"groupId";static final String ADD_TO_GROUP =
"addToGroup";static final String GROUP_EDIT =
"groupEdit";static final String EDIT_GROUP = "editGroup";
// public static final String USER_SIZE =
"userSize";static final String USER_IN_GROUPS =
"userInGroups";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();
(action == null) action = MAIN_PAGE;message =
"";{ugsi = new UserGroupServiceImpl(url, driver, user, password);
// FileFolderServiceImpl ffsi = new
FileFolderServiceImpl(url, driver, user, password);
// TasksServiceImpl tsi = new TasksServiceImpl(url, driver,
user, password);login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);
(action != null) {
(login == null).sendRedirect(request.getContextPath() +
"/auth");{a = new Admin(login, password);.setAttribute(USURNAME,
a.getLogin());
/* User u = ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB, u.getJob()); */(action.equals(GROUPS))
{<Group> groupsList = ugsi.listGroups();.setAttribute(GROUPSLIST,
groupsList);requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/admin/adminGroups.jsp");.include(request,
response);
} else if (action.equals(NEW_GROUP)) {requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminNewGroup.jsp");.include(request,
response);
} else if (action.equals(DELETE_GROUP)) {groupId =
request.getParameter(GROUP_ID);g = new
Group(Long.parseLong(groupId));.deleteGroup(g);.sendRedirect(request.getContextPath()
+ "/admin_user_group?action=" + AdminUserGroupServlet.GROUPS);
} else if (action.equals(GROUP_LIST)) {groupId =
request.getParameter(GROUP_ID);groupName =
request.getParameter(GROUP_NAME);group = new Group(Long.parseLong(groupId),
groupName);<User> userList =
ugsi.listUsersInGroup(group);.setAttribute(USERS_IN_GROUP,
userList);.setAttribute(GROUP, group);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminGroupList.jsp");.include(request,
response);
} else if (action.equals(USERS)) {<User> users =
ugsi.listUsersForAdmin();.setAttribute(USERS_LIST, users);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUsers.jsp");.include(request,
response);
} else if (action.equals(EDIT_USER)) {userId =
request.getParameter(USER_ID);user =
ugsi.getUserInfo(Long.parseLong(userId));.setAttribute(USER,
user);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminEditUser.jsp");.include(request,
response);
} else if (action.equals(DELETE_USER)) {userId =
request.getParameter(USER_ID);user = new
User(Long.parseLong(userId));.deleteUser(user);.sendRedirect(request.getContextPath()
+ "/admin_user_group?action=" + AdminUserGroupServlet.USERS);
} else if (action.equals(RESTORE_USER)) {userId =
request.getParameter(USER_ID);user = new
User(Long.parseLong(userId));.restoreUser(user);.sendRedirect(request.getContextPath()
+ "/admin_user_group?action=" + AdminUserGroupServlet.USERS);
} else if (action.equals(NEW_USER)) {requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminNewUser.jsp");.include(request,
response);
} else if (action.equals(USER_INFO)) {userId =
request.getParameter(USER_ID);user =
ugsi.getUserInfo(Long.parseLong(userId));.setAttribute(USER,
user);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserInfo.jsp");.include(request,
response);
} else if (action.equals(USER_IN_GROUPS)) {userId =
request.getParameter(USER_ID);u = ugsi.getUserInfo(Long.parseLong(userId));user
= new User(Long.parseLong(userId));<Group> groups =
ugsi.listUserGroups(user);.setAttribute(GROUPS, groups);.setAttribute(USER,
u);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserInGroups.jsp");.include(request,
response);
} else if (action.equals(GROUP_EDIT)) {groupId =
request.getParameter(GROUP_ID);groupName =
request.getParameter(GROUP_NAME);group = new Group(Long.parseLong(groupId),
groupName);.setAttribute(GROUP, group);<User> users =
ugsi.listUsers();.setAttribute(USERS, users);usersInGroup[] = new
boolean[users.size()];(int i = 0; i < users.size(); i++) {u =
users.get(i);[i] = ugsi.userAreInGroup(u, group);
}.setAttribute(USERS_IN_GROUP,
usersInGroup);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminEditGroup.jsp");.include(request,
response);
}
}
}
}
(Exception e) {= e.getMessage();
// message = "mane page
error";.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session =
request.getSession();message = "";{login = (String)
session.getAttribute(LOGIN);pass = (String) session.getAttribute(PASSWORD);
// FileFolderServiceImpl ffsi = new FileFolderServiceImpl(url,
driver, user, password);
// TasksServiceImpl tsi = new TasksServiceImpl(url, driver,
user, password);
(action != null) {(login ==
null).sendRedirect(request.getContextPath() + "/auth");{ugsi = new
UserGroupServiceImpl(url, driver, user, password);a = new Admin(login,
password);.setAttribute(USURNAME, a.getLogin());(action.equals(USER_EDIT)) {uId
= request.getParameter(USER_ID);uSurname =
request.getParameter(USER_SURNAME);uName =
request.getParameter(USER_NAME);uPatronymic = request.getParameter(USER_PATRONYMIC);uJob
= request.getParameter(USER_JOB);uEmail =
request.getParameter(USER_LOGIN);uPassword =
request.getParameter(USER_PASSWORD);u = new User(Long.parseLong(uId), uSurname,
uName, uPatronymic, uJob, uEmail, uPassword);
int ok = ugsi.editUser(u);
if (ok == 2) {
message
= "Пользователь с таким логином уже существует! Пожалуйста, введите другой
логин";
request.setAttribute(MESSAGE, message);
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserGroupMessage.jsp");.include(request,
response);
} else if (ok == 1) { = "Введенный логин не является адресом электронной
почты! Пожалуйста, введите другой логин!!";
request.setAttribute(MESSAGE, message);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserGroupMessage.jsp");
requestDispatcher.include(request, response);
} else if (ok == 0) {= "Произошла
ошибка!";.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserGroupMessage.jsp");.include(request,
response);
} else.sendRedirect(request.getContextPath() +
"/admin_user_group?action=" + AdminUserGroupServlet.USERS);
} else if (action.equals(CREATE_NEW_USER)) {uSurname =
request.getParameter(USER_SURNAME);uName =
request.getParameter(USER_NAME);uPatronymic =
request.getParameter(USER_PATRONYMIC);uJob =
request.getParameter(USER_JOB);uEmail =
request.getParameter(USER_LOGIN);uPassword =
request.getParameter(USER_PASSWORD);user = new User(uSurname, uName, uPatronymic,
uJob, uEmail, uPassword);
int ok = ugsi.addUser(user);
if (ok == 1) {
message
= "Введенный логин не является адресом электронной почты! Пожалуйста,
введите другой логин!";
request.setAttribute(MESSAGE, message);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserGroupMessage.jsp");
requestDispatcher.include(request, response);
} else if (ok == 2) { = "Пользователь с таким логином уже существует!
Пожалуйста, введите другой логин!";
request.setAttribute(MESSAGE, message);
RequestDispatcher requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserGroupMessage.jsp");.include(request,
response);
} else.sendRedirect(request.getContextPath() +
"/admin_user_group?action=" + AdminUserGroupServlet.USERS);
} else if (action.equals(CREATE_NEW_GROUP)) {groupName =
request.getParameter(GROUP_NAME);g = new Group(groupName);ok =
ugsi.addGroup(g); (ok == 1) {
message
= "Группа с таким именем уже существует! Пожалуйста, введите другое имя
группы!";
request.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminUserGroupMessage.jsp");.include(request,
response);
} else.sendRedirect(request.getContextPath() +
"/admin_user_group?action=" + AdminUserGroupServlet.GROUPS);
} else if (action.equals(EDIT_GROUP)) {groupId =
request.getParameter(GROUP_ID);groupName = request.getParameter(GROUP_NAME);g =
new Group(Long.parseLong(groupId));[] userIds =
request.getParameterValues("users");(userIds != null) {[] checkedUsers
= new User[userIds.length];(int i = 0; i < userIds.length; i++) {[i] = new
User(Long.parseLong(userIds[i]));
}<User> allUsers = ugsi.listUsers();
for (int i = 0; i < allUsers.size(); i++) {u =
allUsers.get(i);uId = u.getId();checked = false;(int j = 0; j <
userIds.length; j++) {
if (uId == Long.parseLong(userIds[j])) {
checked = true;
break;
}
}inGroup = ugsi.userAreInGroup(u, g);(checked) {
if (!inGroup) {
ugsi.addUserToGroup(u, g);
}
} else {
if (inGroup)
ugsi.deleteUserFromGroup(u, g);
}
}
} else {<User> allUsers = ugsi.listUsers();
for (int i = 0; i < allUsers.size(); i++) {u =
allUsers.get(i);inGroup = ugsi.userAreInGroup(u, g);(inGroup)
ugsi.deleteUserFromGroup(u, g);
}
}.setAttribute(GROUP_ID, groupId);.setAttribute(GROUP_NAME,
groupName);.sendRedirect(request.getContextPath() +
"/admin_user_group?action=" + AdminUserGroupServlet.GROUP_LIST +
"&" + AdminUserGroupServlet.GROUP_ID + "=" + groupId +
"&" + AdminUserGroupServlet.GROUP_NAME + "=" +
groupName);
}
}
}
}
(Exception) {= e.getMessage();
// message = "mane page
error";.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}
ru.ksu.eldoc.web;
ru.ksu.eldoc.services.impl.UserGroupServiceImpl;ru.ksu.eldoc.services.impl.FileFolderServiceImpl;ru.ksu.eldoc.services.impl.TasksServiceImpl;ru.ksu.eldoc.objects.*;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;java.io.PrintWriter;java.util.List;
class AdminFileFolderTaskServlet extends HttpServlet {String
url;String driver;String user;String password;
// actionsstatic final String AFFT = "afft";static
final String LOGIN = "login";static final String PASSWORD =
"password";static final String MESSAGE = "message";static
final String USURNAME = "uSurname";static final String UNAME =
"uName";static final String PATRONYMIC =
"patronymic";static final String JOB = "job";static final
String USER_ID = "uId";static final String FOLDERS =
"folders";static final String NEW_DOCUMENT =
"newDocument";static final String NEW_DOCUMENT_IN_FOLDER =
"newDocumentInFolder";static final String MY_TASKS =
"myTasks";static final String TASKS = "my_Tasks";static
final String FOLDER_CONTENTS = "folderContents";static final String
FOLDER_ID = "folderId";static final String FROM_FOLDER =
"fromFolder";static final String FROM_FOLDER_ID =
"fromFolderId";static final String ANSWER_DELETE_FOLDER =
"deleteFolder";static final String DELETE_FOLDER =
"deleteFolder";static final String DELETE_TASK =
"deleteTask";static final String DELETE_FILE =
"deleteFile";static final String FILE_ID = "fileId";static
final String FILE_INFO = "fileInfo";static final String FILEINFO =
"fileinfo";static final String FOLDER = "folder";static
final String ADD_FOLDER = "addFolder";static final String FOLDER_NAME
= "folderName";static final String CREATE_NEW_FOLDER =
"createNewFolder";static final String VERSION =
"version";static final String VERSION_NUMBER =
"versionNumber";static final String SHOW_TASKS =
"showTasks";static final String NEW_TASK = "newTask";static
final String TASK_ID = "taskId";static final String CREATE_NEW_TASK =
"createNewTask";static final String TASK_TEXT =
"taskText";static final String SHOW_FILE_ACCESS =
"showFileAccess";static final String FILE_ACCESS =
"fileAccess";static final String DELETE_VERSION =
"deleteVersion";static final String DELETE_ALL_VERSION =
"deleteAllVersion";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");
}
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session =
request.getSession();ugsi;ffsi;(action == null) action = AFFT;message =
"";{login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);(action != null) {
(login == null).sendRedirect(request.getContextPath() +
"/auth");{= new FileFolderServiceImpl(url, driver, user,
password);tsi = new TasksServiceImpl(url, driver, user, password);a = new
Admin(login, password);.setAttribute(USURNAME, a.getLogin());
(action.equals(ANSWER_DELETE_FOLDER)) {folderId = (String)
session.getAttribute(FOLDER);.setAttribute(FOLDER_ID, folderId);folName =
ffsi.getNameOfFolder(Long.parseLong(folderId));.setAttribute(FOLDER_NAME, folName);requestDispatcher
=
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminAnswerDeleteFolder.jsp");.include(request,
response);
} else if (action.equals(ADD_FOLDER)) {requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminNewFolder.jsp");.include(request,
response);
} else if (action.equals(FILE_INFO)) {fileId =
request.getParameter(FILE_ID);f = new File(Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(f);.setAttribute(FILEINFO, fInfo);.setAttribute(FILE_ID,
fileId);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminFileInfo.jsp");.include(request,
response);
} else if (action.equals(DELETE_TASK)) {taskId =
request.getParameter(TASK_ID);t = new
Tasks(Long.parseLong(taskId));.deleteTask(t);.sendRedirect(request.getContextPath()
+ "/afft?action=" + AdminFileFolderTaskServlet.SHOW_TASKS);
} else if (action.equals(NEW_TASK)) {requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminNewTask.jsp");.include(request,
response);
} else if (action.equals(SHOW_TASKS)) {<Tasks> tasks =
tsi.showTasks();.setAttribute(TASKS, tasks);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminTasks.jsp");.include(request,
response);
} else if (action.equals(DELETE_FILE)) {fileId = request.getParameter(FILE_ID);.ksu.eldoc.objects.File
f = new ru.ksu.eldoc.objects.File(Long.parseLong(fileId));= new
FileFolderServiceImpl(url, driver, user, password);
path1 = ffsi.getFileUrl(f);pathv = "";.io.File
uploadetFile = new java.io.File(path1);.delete();numb =
ffsi.getNumberOfVersions(f);(int i = 2; i <= numb; i++) {num =
path1.indexOf('.');sub1 = path1.substring(0, num);sub2 = path1.substring(num,
path1.length());iS = String.valueOf(i);(iS.length() == 1)= sub1 +
"#00" + iS + sub2;if (iS.length() == 2)= sub1 + "#0" + iS +
sub2;if (iS.length() == 3)= sub1 + "#" + iS + sub2;= new
java.io.File(pathv);.delete();
}.deleteFile(f);.sendRedirect(request.getContextPath() +
"/admin_main");
} else if (action.equals(VERSION)) {fileId =
request.getParameter(FILE_ID);f = new
File(Long.parseLong(fileId));.setAttribute(FILE_ID,
Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(f);.setAttribute(FILEINFO, fInfo);<Version> v =
ffsi.showVersionOfFile(f);.setAttribute(VERSION_NUMBER, v);requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/admin/adminVersion.jsp");.include(request,
response);
} else if (action.equals(SHOW_FILE_ACCESS)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);f = new
File(Long.parseLong(fileId));fInfo = ffsi.getInfOfFileToSee(f);.setAttribute(FILEINFO,
fInfo);fa = ffsi.showMyFileAccess(f);.setAttribute(FILE_ACCESS,
fa);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/admin/adminShowFileAccess.jsp");.include(request,
response);
} else if (action.equals(DELETE_VERSION)) {fileId =
request.getParameter(FILE_ID);number =
request.getParameter(VERSION_NUMBER);.ksu.eldoc.objects.File f = new
ru.ksu.eldoc.objects.File(Long.parseLong(fileId));fi = new
FileInfo(Long.parseLong(fileId));.setFileinfo(fi);n = (int)
Long.parseLong(number);= new FileFolderServiceImpl(url, driver, user,
password);
numToPath = ffsi.getNumberToPathOfVersion(f, n);path =
ffsi.getFileUrl(f);pathv = "";num = path.indexOf('.');sub1 =
path.substring(0, num);sub2 = path.substring(num, path.length());iS =
String.valueOf(numToPath);(iS.length() == 1)= sub1 + "#00" + iS +
sub2;if (iS.length() == 2)= sub1 + "#0" + iS + sub2;if (iS.length()
== 3)= sub1 + "#" + iS + sub2;.io.File uploadetFile = new
java.io.File(pathv);.delete();.deleteVersion(f, n);.sendRedirect(request.getContextPath()
+ "/afft?action=" + AdminFileFolderTaskServlet.VERSION +
"&" + AdminFileFolderTaskServlet.FILE_ID + "=" +
fileId);
}
}
}
}(Exception e) {= e.getMessage();.setAttribute(MESSAGE,
message);requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session =
request.getSession();message = "";{login = (String)
session.getAttribute(LOGIN);pass = (String) session.getAttribute(PASSWORD);
if (action != null) {(login ==
null).sendRedirect(request.getContextPath() + "/auth");{ugsi = new
UserGroupServiceImpl(url, driver, user, password);ffsi = new
FileFolderServiceImpl(url, driver, user, password);tsi = new
TasksServiceImpl(url, driver, user, password);a = new Admin(login,
password);.setAttribute(USURNAME, a.getLogin());
(action.equals(CREATE_NEW_TASK)) {taskText =
request.getParameter(TASK_TEXT);newTask = new
Tasks(taskText);.fixTask(newTask);.sendRedirect(request.getContextPath() +
"/afft?action=" + AdminFileFolderTaskServlet.SHOW_TASKS);
} else if (action.equals("testTree")) {= new
FileFolderServiceImpl(url, driver, user, password);folderId =
request.getParameter("dir").replaceAll("\\/",
"");.removeAttribute(FOLDER);.setAttribute(FOLDER, folderId);name =
2;f = new Folder(Long.parseLong(folderId));ff = ffsi.showFoldersAndFilesFromFolder(a,
f);
out = response.getWriter();
.print("<ul>
// All dirs(Folder folder: ff.getFolders())
{.print("<li>
+ folder.getName() + "</a></li>");
}
// All files(File file: ff.getFiles()) {dotIndex =
file.getName().lastIndexOf('.');ext = dotIndex > 0 ?
file.getName().substring(dotIndex + 1): "";.print("<li>
+ file.getName() + "</a></li>");
}.print("</ul>");
} else if (action.equals(DELETE_ALL_VERSION)) {= new
FileFolderServiceImpl();fileId = request.getParameter(FILE_ID);f = new
File(Long.parseLong(fileId));fi = new FileInfo(Long.parseLong(fileId));.setFileinfo(fi);[]
deletedId = request.getParameterValues("deleted");(deletedId != null)
{n = (int) (Long.parseLong(deletedId[0]));numb =
ffsi.getNumberOfVersions(f);path1 = ffsi.getFileUrl(f);pathv =
"";(int i = 2; i <= numb; i++) {numToPath = ffsi.getNumberToPathOfVersion(f,
numb);num = path1.indexOf('.');sub1 = path1.substring(0, num);sub2 =
path1.substring(num, path1.length());iS =
String.valueOf(numToPath);(iS.length() == 1)
pathv = sub1 + "#00" + iS + sub2;if (iS.length() ==
2)
pathv = sub1 + "#0" + iS + sub2;if (iS.length() ==
3)
pathv = sub1 + "#" + iS + sub2;.io.File
uploadetFile = new java.io.File(pathv);.delete();
}.deleteAllVersion(f,
n);.sendRedirect(request.getContextPath() + "/afft?action=" +
AdminFileFolderTaskServlet.VERSION + "&" + AdminFileFolderTaskServlet.FILE_ID
+ "=" + fileId);
} else {.sendRedirect(request.getContextPath() +
"/afft?action=" + AdminFileFolderTaskServlet.VERSION +
"&" + AdminFileFolderTaskServlet.FILE_ID + "=" +
fileId);
}
} else if (action.equals(CREATE_NEW_FOLDER)) {folName =
request.getParameter(FOLDER_NAME);folderId = (String)
session.getAttribute(FOLDER);topFolder = new
Folder(Long.parseLong(folderId));addFolder = new
Folder(folName);.addFolder(addFolder,
topFolder);.sendRedirect(request.getContextPath() + "/admin_main");
} else if (action.equals(DELETE_FOLDER)) {folderId = (String)
request.getParameter(FOLDER_ID);f = new
Folder(Long.parseLong(folderId));.deleteFolder(f);.sendRedirect(request.getContextPath()
+ "/admin_main");
}
}
}
}(Exception e) {= e.getMessage();.setAttribute(MESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}
ru.ksu.eldoc.web;
ru.ksu.eldoc.services.impl.UserGroupServiceImpl;ru.ksu.eldoc.services.impl.FileFolderServiceImpl;ru.ksu.eldoc.services.impl.TasksServiceImpl;ru.ksu.eldoc.objects.User;ru.ksu.eldoc.objects.FileToSee;ru.ksu.eldoc.objects.Admin;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;java.io.File;java.io.FileInputStream;
class AdminDownload extends HttpServlet {String url;String
driver;String user;String password;String path;
static final String LOGIN = "login";static final
String PASSWORD = "password";static final String USURNAME =
"uSurname";static final String UNAME = "uName";static final
String PATRONYMIC = "patronymic";static final String JOB =
"job";static final String USER_ID = "uId";static final
String DOWNLOAD = "download";static final String DOWNLOAD_FILE =
"downloadFile";static final String DOWNLOAD_VERSION =
"downloadVersion";static final String VERSION_NUMBER =
"versionNumber";static final String FILE_ID =
"fileId";static final String PATH = "path";static final
String UPLOADMESSAGE = "message";static final String FOLDER_ID =
"folderId";static final String FILEINFO = "fileinfo";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");= getInitParameter("user");=
getInitParameter("password");=
getInitParameter("rootFolder");
}
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session =
request.getSession();ugsi;ffsi;message = "";{login = (String)
session.getAttribute(LOGIN);pass = (String) session.getAttribute(PASSWORD);
(action != null) {
(login == null).sendRedirect(request.getContextPath() +
"/auth");{= new FileFolderServiceImpl(url, driver, user,
password);tsi = new TasksServiceImpl(url, driver, user, password);a = new
Admin(login, password);.setAttribute(USURNAME, a.getLogin());(action.equals(DOWNLOAD))
{
fileId = request.getParameter(FILE_ID);.setAttribute(FILE_ID,
fileId);folderId = request.getParameter(FOLDER_ID);= new
FileFolderServiceImpl(url, driver, user, password);.ksu.eldoc.objects.File file
= new ru.ksu.eldoc.objects.File(Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(file);.setAttribute(FILEINFO, fInfo);path =
ffsi.getFileUrl(file);.setAttribute(PATH, path);(request, response,
path);.sendRedirect(request.getContextPath() + "/afft?action=" +
FileFolderTaskServlet.FOLDER_CONTENTS + "&" +
FileFolderTaskServlet.FOLDER_ID + "=" + folderId);
// RequestDispatcher requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/downloadFile.jsp");
// requestDispatcher.include(request, response);
} else if (action.equals(DOWNLOAD_VERSION)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);number =
request.getParameter(VERSION_NUMBER);= new FileFolderServiceImpl(url, driver,
user, password);.ksu.eldoc.objects.File file = new
ru.ksu.eldoc.objects.File(Long.parseLong(fileId));numberToPath =
ffsi.getNumberToPathOfVersion(file, Integer.parseInt(number));
path = ffsi.getFileUrl(file);pathv = "";num =
path.indexOf('.');sub1 = path.substring(0, num);sub2 = path.substring(num,
path.length());iS = String.valueOf(numberToPath);(iS.length() == 1)= sub1 +
"#00" + iS + sub2;if (iS.length() == 2)= sub1 + "#0" + iS +
sub2;if (iS.length() == 3)= sub1 + "#" + iS + sub2;(request,
response, pathv);.sendRedirect(request.getContextPath() +
"/afft?action=" + AdminFileFolderTaskServlet.VERSION +
"&" + AdminFileFolderTaskServlet.FILE_ID + "=" +
fileId);
}
}
}
}(Exception e) {= e.getMessage();
// message = "mane page
error";.setAttribute(UPLOADMESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
}
}
void dowload(HttpServletRequest request, HttpServletResponse
response, String path) throws IOException {file = new File(path);fin = new
FileInputStream(file);available = fin.available();[] buffer = new
byte[available];.read(buffer);.close();
num = path.indexOf('.');sub2 = path.substring(num + 1,
path.length());(sub2.equals("doc")).setContentType("application/msword");if
(sub2.equals("jpg") ||
sub2.equals("JPG")).setContentType("image/jpg");if
(sub2.equals("bmp")).setContentType("image/bmp");if
(sub2.equals("xls")).setContentType("application/vnd.ms-excel");if
(sub2.equals("pdf")).setContentType("application/pdf");if
(sub2.equals("gif")).setContentType("image/gif");if (sub2.equals("zip")).setContentType("application/zip");if
(sub2.equals("ppt")).setContentType("application/vnd.ms-powerpoint");if
(sub2.equals("txt")).setContentType("text/plain");.getOutputStream().write(buffer);
response.getOutputStream().close();
}
}
ПРИЛОЖЕНИЕ 3
Контроллер, отвечающий за работу обычного пользователя
MainPageServletru.ksu.eldoc.web;
ru.ksu.eldoc.objects.*;ru.ksu.eldoc.services.impl.FileFolderServiceImpl;ru.ksu.eldoc.services.impl.UserGroupServiceImpl;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;java.util.List;
class MainPageServlet extends HttpServlet {String url;String
driver;String user;String password;
// actionsstatic final String MAIN_PAGE =
"mainPage";
// parametersstatic final String LOGIN =
"login";static final String PASSWORD = "password";static
final String EXIT = "exit";static final String MESSAGE =
"message";static final String USURNAME = "uSurname";static
final String UNAME = "uName";static final String PATRONYMIC =
"patronymic";static final String JOB = "job";static final
String FOLDERS = "folders";static final String NEW_DOCUMENT =
"newDocument";static final String MY_TASKS =
"myTasks";static final String TASKS = "my_Tasks";static
final String GROUPS = "groups";static final String GROUPSLIST =
"groupsList";static final String GROUP_LIST =
"groupList";static final String USERS_IN_GROUP =
"usersInGroup";static final String GROUP_ID =
"groupId";static final String FOLDER_CONTENTS =
"folderContents";static final String FOLDER_ID =
"folderId";static final String FROM_FOLDER = "fromFolder";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");
}
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session =
request.getSession();ugsi;ffsi;(action == null) action = MAIN_PAGE;message =
"";{login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);
(action != null) {
(login == null).sendRedirect(request.getContextPath() +
"/auth");{= new UserGroupServiceImpl(url, driver, user, password);u =
ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB, u.getJob());(action.equals(MAIN_PAGE))
{requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/mainPage.jsp");.include(request,
response);
} else if (action.equals(EXIT))
{.removeAttribute(LOGIN);.removeAttribute(PASSWORD);.sendRedirect(request.getContextPath()
+ "/auth");
}
}
}
}
(Exception e) {= e.getMessage();.setAttribute(MESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}
ru.ksu.eldoc.web;
ru.ksu.eldoc.services.impl.UserGroupServiceImpl;ru.ksu.eldoc.objects.Group;ru.ksu.eldoc.objects.User;
javax.servlet.ServletException;javax.servlet.RequestDispatcher;javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;java.io.IOException;java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Leno4ka
* Date: 26.05.2010
* Time: 18:59:21
* To change this template use File | Settings | File
Templates.
*/class UserGroupServlet extends HttpServlet {String
url;String driver;String user;String password;
static final String MAIN_PAGE = "mainPage";static
final String MESSAGE = "message";static final String LOGIN =
"login";static final String PASSWORD = "password";static
final String USURNAME = "uSurname";static final String UNAME =
"uName";static final String PATRONYMIC =
"patronymic";static final String JOB = "job";static final
String USERS = "users";static final String USER =
"user";static final String USER_ID = "userId";static final
String USER_INFO = "userInfo";static final String USER_LOGIN =
"userLogin";static final String USERS_LIST =
"usersList";static final String USER_SURNAME =
"userSurname";static final String USER_NAME =
"userName";static final String USER_PATRONYMIC = "userPatronymic";static
final String USER_JOB = "userJob";static final String USER_EMAIL =
"userEmail";
static final String GROUP = "group";static final
String GROUP_NAME = "groupName";static final String GROUPS =
"groups";static final String GROUPSLIST =
"groupsList";static final String GROUP_LIST = "groupList";static
final String USERS_IN_GROUP = "usersInGroup";static final String
GROUP_ID = "groupId";static final String USER_IN_GROUPS =
"userInGroups";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");= getInitParameter("user");=
getInitParameter("password");
}
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();
(action == null) action = MAIN_PAGE;message =
"";{ugsi = new UserGroupServiceImpl(url, driver, user,
password);login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);
(action != null) {
(login == null).sendRedirect(request.getContextPath() +
"/auth");{= new UserGroupServiceImpl(url, driver, user, password);u =
ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB, u.getJob());
(action.equals(GROUPS)) {<Group> groupsList =
ugsi.listGroups();.setAttribute(GROUPSLIST, groupsList);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/groups.jsp");.include(request,
response);
} else if (action.equals(GROUP_LIST)) {groupId =
request.getParameter(GROUP_ID);group = new
Group(Long.parseLong(groupId));groupName =
ugsi.getGroupName(group);.setName(groupName);<User> userList =
ugsi.listUsersInGroup(group);.setAttribute(USERS_IN_GROUP,
userList);.setAttribute(GROUP, group);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/groupList.jsp");.include(request,
response);
} else if (action.equals(USERS)) {<User> users =
ugsi.listUsersForAdmin();.setAttribute(USERS_LIST, users);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/users.jsp");.include(request,
response);
} else if (action.equals(USER_INFO)) {userId =
request.getParameter(USER_ID);user =
ugsi.getUserInfo(Long.parseLong(userId));.setAttribute(USER, user);requestDispatcher
=
request.getRequestDispatcher("/WEB-INF/jsp/userInfo.jsp");.include(request,
response);
} else if (action.equals(USER_IN_GROUPS)) {userId =
request.getParameter(USER_ID);us =
ugsi.getUserInfo(Long.parseLong(userId));user = new User(Long.parseLong(userId));<Group>
groups = ugsi.listUserGroups(user);.setAttribute(GROUPS,
groups);.setAttribute(USER, us);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/userInGroups.jsp");.include(request,
response);
}
}
}
}(Exception e) {= e.getMessage();.setAttribute(MESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}
ru.ksu.eldoc.web;
ru.ksu.eldoc.objects.*;ru.ksu.eldoc.services.impl.*;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;java.io.PrintWriter;java.util.List;class
FileFolderTaskServlet extends HttpServlet {String url;String driver;String
user;String password;
// actionsstatic final String FFT = "fft";
// parametersstatic final String LOGIN =
"login";static final String PASSWORD = "password";static
final String MESSAGE = "message";static final String USURNAME =
"uSurname";static final String UNAME = "uName";static final
String PATRONYMIC = "patronymic";static final String JOB =
"job";static final String USER_ID = "uId";static final
String FOLDERS = "folders";static final String NEW_DOCUMENT =
"newDocument";static final String NEW_DOCUMENT_IN_FOLDER =
"newDocumentInFolder";static final String MY_TASKS =
"myTasks";static final String TASKS = "my_Tasks";static
final String VERSION = "version";static final String VERSION_NUMBER =
"number";
static final String ADD_TASK = "addTask";static
final String TASK_TO_FILE = "taskToFile";static final String ID =
"id";
public static final String FOLDER_CONTENTS =
"folderContents";static final String FOLDER_ID =
"folderId";static final String FOL_ID = "folderId";static
final String FROM_FOLDER = "fromFolder";static final String
FROM_FOLDER_ID = "fromFolderId";static final String FILE_INFO =
"fileInfo";static final String FILE_ID = "fileId";static
final String FILEINFO = "fileinfo";
static final String NEW_FILE = "newfile";static
final String FILE_NAME = "fileName";static final String FILE_COMMENT
= "comment";static final String FOLDER_TO_FILE =
"ftf";static final String DAYS_OF_STORAGE =
"storage";static final String NEWFILE = "newFile";static
final String USERS = "users";static final String MY_ADDED_TASKS =
"addedTasks";static final String ADDEDTASKS =
"addedtasks";static final String DELETE_TASK =
"deleteTask";static final String DELETED_TASK = "deletedTask";
static final String ADD_TASK_TO_FILE = "addTaskToFile";
static final String DELETE_FILE = "deleteFile";
static final String MY_ADDED_FILES =
"myAddedFiles";static final String MY_FILES =
"myFiles";static final String USER_GROUP_ACCESS =
"userGroupAccess";static final String USER_GROUP_ACCESS_POST = "userGroupAccess";static
final String SHOW_FILE_ACCESS = "showFileAccess";static final String
GROUP_ACCESS = "groupAccess";static final String EDIT_GROUP_ACCESS =
"editGroupAccess";static final String USER_ACCESS = "userAccess";static
final String EDIT_USER_ACCESS = "editUserAccess";static final String
FILE = "file";static final String ALLGROUPS =
"allgroups";static final String GROUPS = "groups";static
final String FILE_ACCESS = "fileAccess";static final String
EDIT_MY_TASKS = "editMyTasks";static final String EDIT_MY_ADDED_TASKS
= "editMyAddedTasks";static final String DELETE_VERSION =
"deleteVersion";static final String DELETE_ALL_VERSION =
"deleteAllVersion";static final String NUMBER =
"number";static final String FOLDER = "folder";static final
String PAGE_NAME = "pageName";
static final String TASKS_TO_FILE =
"tasksToFile";static final String FILE_TASKS = "fileTasks";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");
}
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();ugsi;ffsi;(action
== null) action = FFT;message = "";{login = (String)
session.getAttribute(LOGIN);pass = (String) session.getAttribute(PASSWORD);
(action != null) {
(login == null).sendRedirect(request.getContextPath() +
"/auth");{= new UserGroupServiceImpl(url, driver, user, password);u =
ugsi.getUserInfo(login);.setAttribute(USER_ID,
u.getId());.setAttribute(USURNAME, u.getSurname());.setAttribute(UNAME,
u.getName());.setAttribute(PATRONYMIC, u.getPatronymic());.setAttribute(JOB,
u.getJob());= new FileFolderServiceImpl(url, driver, user,
password);(action.equals(FFT)) {
} else if (action.equals(NEW_DOCUMENT_IN_FOLDER)) {folderId =
(String) session.getAttribute(FOLDER);.setAttribute(FOLDER_ID,
folderId);requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/newDocumentInFolder.jsp");.include(request,
response);
} else if (action.equals(MY_TASKS)) {tsi = new
TasksServiceImpl(url, driver, user, password);<MyTask> myTasks =
tsi.showMyTasks(u);.setAttribute(TASKS, myTasks);requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/myTasks.jsp");.include(request,
response);
} else if (action.equals(FOLDER_CONTENTS)) {folderId =
request.getParameter(FOLDER_ID);.setAttribute(FROM_FOLDER_ID, folderId);
f = new Folder(Long.parseLong(folderId));.setAttribute(FOLDER_ID,
folderId);ff = ffsi.showFoldersAndFilesFromFolder(u,
f);.setAttribute(FROM_FOLDER, ff);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/folderContents.jsp");.include(request,
response);
} else if (action.equals(FILE_INFO)) {fileId =
request.getParameter(FILE_ID);f = new File(Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(f);.setAttribute(FILEINFO, fInfo);.setAttribute(FILE_ID,
fileId);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/fileInfo.jsp");.include(request,
response);
} else if (action.equals(VERSION)) {fileId =
request.getParameter(FILE_ID);f = new
File(Long.parseLong(fileId));.setAttribute(FILE_ID,
Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(f);.setAttribute(FILEINFO, fInfo);<Version> v =
ffsi.showVersionOfFile(f);.setAttribute(VERSION_NUMBER, v);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/version.jsp");.include(request,
response);
} else if (action.equals(MY_ADDED_TASKS)) {tsi = new
TasksServiceImpl(url, driver, user, password);<MyTask> myTasks =
tsi.showMyAddedTasks(u);.setAttribute(ADDEDTASKS, myTasks);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/myAddedTasks.jsp");.include(request,
response);
} else if (action.equals(DELETE_TASK)) {tsi = new TasksServiceImpl(url,
driver, user, password);taskId = request.getParameter(DELETED_TASK);fileId =
request.getParameter(FILE_ID);f = new File(Long.parseLong(fileId));myTask = new
MyTask(Long.parseLong(taskId), f);.deleteTaskFromFile(myTask);.sendRedirect(request.getContextPath()
+ "/fft?action=" + FileFolderTaskServlet.TASKS_TO_FILE +
"&" + FileFolderTaskServlet.FILE_ID + "=" + fileId);
} else if (action.equals(ADD_TASK)) {tsi = new
TasksServiceImpl(url, driver, user, password);fileId = request.getParameter(FILE_ID);.setAttribute(FILE_ID,
Long.parseLong(fileId));<Tasks> tasks =
tsi.showTasks();.setAttribute(TASK_TO_FILE, tasks);
List<User> users = ugsi.listUsers();
request.setAttribute(USERS, users);f = new
File(Long.parseLong(fileId));fInfo = ffsi.getInfOfFileToSee(f);.setAttribute(FILEINFO,
fInfo);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/addTaskToFile.jsp");.include(request,
response);
} else if (action.equals(MY_ADDED_FILES)) {<File> files
= ffsi.showMyAddedFilesInfo(u);.setAttribute(MY_FILES, files);
// long name = 1;
//request.setAttribute(PAGE, name);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/myAddedFiles.jsp");.include(request,
response);
} else if (action.equals(TASKS_TO_FILE)) {tsi = new
TasksServiceImpl(url, driver, user, password);fileId =
request.getParameter(FILE_ID);file = new File(Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(file);.setAttribute(FILEINFO, fInfo);<MyTask>
tasksToFile = tsi.showTasksToFile(file);.setAttribute(FILE_TASKS, tasksToFile);requestDispatcher
=
request.getRequestDispatcher("/WEB-INF/jsp/fileTasks.jsp");.include(request,
response);
} else if (action.equals(SHOW_FILE_ACCESS)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);f = new
File(Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(f);.setAttribute(FILEINFO, fInfo);fa =
ffsi.showMyFileAccess(f);.setAttribute(FILE_ACCESS, fa);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/showFileAccess.jsp");.include(request,
response);
} else if (action.equals(USER_GROUP_ACCESS)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);f = new
File(Long.parseLong(fileId));fileInfo =
ffsi.getInfOfFile(f);.setAttribute(FILEINFO, fileInfo);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/userGroupAccess.jsp");.include(request,
response);
} else if (action.equals(DELETE_FILE)) {fileId =
request.getParameter(FILE_ID);folderId =
request.getParameter(FOLDER_ID);.ksu.eldoc.objects.File f = new ru.ksu.eldoc.objects.File(Long.parseLong(fileId));=
new FileFolderServiceImpl(url, driver, user, password);path1 =
ffsi.getFileUrl(f);pathv = "";.io.File uploadetFile = new
java.io.File(path1);.delete();numb = ffsi.getNumberOfVersions(f);(int i = 2; i
<= numb; i++) {num = path1.indexOf('.');sub1 = path1.substring(0, num);sub2
= path1.substring(num, path1.length());iS = String.valueOf(i);(iS.length() ==
1)= sub1 + "#00" + iS + sub2;if (iS.length() == 2)= sub1 +
"#0" + iS + sub2;if (iS.length() == 3)= sub1 + "#" + iS +
sub2;= new java.io.File(pathv);.delete();
}.deleteFile(f);.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.MY_ADDED_FILES);
} else if (action.equals(DELETE_VERSION)) {fileId =
request.getParameter(FILE_ID);number = request.getParameter(VERSION_NUMBER);.ksu.eldoc.objects.File
f = new ru.ksu.eldoc.objects.File(Long.parseLong(fileId));fi = new
FileInfo(Long.parseLong(fileId));.setFileinfo(fi);n = (int)
Long.parseLong(number);= new FileFolderServiceImpl(url, driver, user,
password);
numToPath = ffsi.getNumberToPathOfVersion(f, n);path =
ffsi.getFileUrl(f);pathv = "";num = path.indexOf('.');sub1 =
path.substring(0, num);sub2 = path.substring(num, path.length());iS =
String.valueOf(numToPath);(iS.length() == 1)= sub1 + "#00" + iS +
sub2;if (iS.length() == 2)= sub1 + "#0" + iS + sub2;if (iS.length()
== 3)= sub1 + "#" + iS + sub2;.io.File uploadetFile = new
java.io.File(pathv);.delete();.deleteVersion(f,
n);.sendRedirect(request.getContextPath() + "/fft?action=" +
FileFolderTaskServlet.VERSION + "&" +
FileFolderTaskServlet.FILE_ID + "=" + fileId);
}
}
}
}
(Exception e) {= e.getMessage();.setAttribute(MESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();ugsi;ffsi;message
= "";{login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);
(action != null) {(login ==
null).sendRedirect(request.getContextPath() + "/auth");{= new
UserGroupServiceImpl(url, driver, user, password);u = ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB, u.getJob());(action.equals(NEW_FILE))
{fName = request.getParameter(FILE_NAME);comment = request.getParameter(FILE_COMMENT);folderId
= request.getParameter(FOLDER_TO_FILE);days =
request.getParameter(DAYS_OF_STORAGE);fi = new FileInfo(u,
Long.parseLong(days));folder = new Folder(Long.parseLong(folderId));f = new
File(fName, comment, folder, fi);= new FileFolderServiceImpl(url, driver, user,
password);.addFile2(f);.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.FOLDER_CONTENTS +
"&" + FileFolderTaskServlet.FOLDER_ID + "=" +
folderId);
} else if (action.equals(ADD_TASK_TO_FILE)) {tsi = new
TasksServiceImpl(url, driver, user, password);fileId =
request.getParameter(FILE_ID);f = new File(Long.parseLong(fileId));[] taskId =
request.getParameterValues("task");t = new
Tasks(Long.parseLong(taskId[0]));[] userId = request.getParameterValues("user");user
= new User(Long.parseLong(userId[0]));myTask = new MyTask(t, f, user,
u);.addTaskToFile(myTask);ml = new MailLogger();mess = "You have a new
task";address = ugsi.getLogin(Long.parseLong(userId[0]));.postMail(mess,
address);.sendRedirect(request.getContextPath() + "/fft?action=" +
FileFolderTaskServlet.MY_ADDED_TASKS);
} else if (action.equals(USER_GROUP_ACCESS_POST)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);f = new
File(Long.parseLong(fileId));= new FileFolderServiceImpl(url, driver, user,
password);fileInfo = ffsi.getInfOfFile(f);.setAttribute(FILEINFO, fileInfo);[]
isAll =
request.getParameterValues("isAll");(isAll[0].equals("yes"))
{.allowAllAccess(f); =
"файл виден всем пользователям";
request.setAttribute(MESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
} else {.denyAllAccess(f);<User> users =
ugsi.listUsers();.setAttribute(USERS, users);userAccess[] = new
boolean[users.size()];(int i = 0; i < users.size(); i++) {us =
users.get(i);[i] = ffsi.checkUserAccess(f, us);
}.setAttribute(USER_ACCESS, userAccess);
<Group> groups =
ugsi.listGroups();.setAttribute(ALLGROUPS, groups);groupAccess[] = new
boolean[groups.size()];(int i = 0; i < groups.size(); i++) {gs =
groups.get(i);[i] = ffsi.checkGroupAccess(f, gs);
}.setAttribute(GROUP_ACCESS, groupAccess);
requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/editUserGroupAccess.jsp");.include(request,
response);
}
} else if (action.equals(EDIT_USER_ACCESS)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);f = new
File(Long.parseLong(fileId));= new FileFolderServiceImpl(url, driver, user,
password);fileInfo = ffsi.getInfOfFile(f);.setAttribute(FILEINFO, fileInfo);[]
userIds = request.getParameterValues("users");(userIds != null) {[]
checkedUsers = new User[userIds.length];
(int i = 0; i < userIds.length; i++) {[i] = new
User(Long.parseLong(userIds[i]));
}<User> allUsers = ugsi.listUsers();
for (int i = 0; i < allUsers.size(); i++) {us =
allUsers.get(i);uId = us.getId();checked = false;(int j = 0; j <
userIds.length; j++) {
if (uId == Long.parseLong(userIds[j])) {
checked = true;
break;
}
}allow = ffsi.checkUserAccess(f, us);(checked) {
if (!allow) {
ffsi.allowAccessToUser(f, us);
}
} else {
if (allow)
ffsi.denyAccessToUser(f, us);
}
}
} else {<User> allUsers = ugsi.listUsers();
for (int i = 0; i < allUsers.size(); i++) {us =
allUsers.get(i);allow = ffsi.checkUserAccess(f, us);(allow)
ffsi.denyAccessToUser(f, us);
}
}.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.SHOW_FILE_ACCESS +
"&" + FileFolderTaskServlet.FILE_ID + "=" + fileId +
"&" + FileFolderTaskServlet.FILE_INFO + "=" +
fileInfo);
}<Group> allGroups = ugsi.listGroups();(int i = 0; i
< allGroups.size(); i++) {gs = allGroups.get(i);gId = gs.getId();checked =
false;(int j = 0; j < groupIds.length; j++) {
if (gId == Long.parseLong(groupIds[j])) {
checked = true;
break;
}
}allow = ffsi.checkGroupAccess(f, gs);(checked) {
if (!allow) {
ffsi.allowAccessToGroup(f, gs);
}
} else {
if (allow)
ffsi.denyAccessToGroup(f, gs);
}
}
} else {<Group> allGroups = ugsi.listGroups();(int i =
0; i < allGroups.size(); i++) {gs = allGroups.get(i);allow =
ffsi.checkGroupAccess(f, gs);(allow)
ffsi.denyAccessToGroup(f, gs);
}
}.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.SHOW_FILE_ACCESS +
"&" + FileFolderTaskServlet.FILE_ID + "=" + fileId +
"&" + FileFolderTaskServlet.FILE_INFO + "=" +
fileInfo);
} else if (action.equals(EDIT_USER_ACCESS)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);f = new
File(Long.parseLong(fileId));= new FileFolderServiceImpl(url, driver, user,
password);fileInfo = ffsi.getInfOfFile(f);.setAttribute(FILEINFO, fileInfo);[]
userIds = request.getParameterValues("users");(userIds != null) {[]
checkedUsers = new User[userIds.length];
(int i = 0; i < userIds.length; i++) {[i] = new
User(Long.parseLong(userIds[i]));
}<User> allUsers = ugsi.listUsers();
for (int i = 0; i < allUsers.size(); i++) {us =
allUsers.get(i);uId = us.getId();checked = false;(int j = 0; j <
userIds.length; j++) {
if (uId == Long.parseLong(userIds[j])) {
checked = true;
break;
}
}allow = ffsi.checkUserAccess(f, us);(checked) {
if (!allow) {
ffsi.allowAccessToUser(f, us);
}
} else {
if (allow)
ffsi.denyAccessToUser(f, us);
}
}
} else {<User> allUsers = ugsi.listUsers();
for (int i = 0; i < allUsers.size(); i++) {us =
allUsers.get(i);allow = ffsi.checkUserAccess(f, us);(allow)
ffsi.denyAccessToUser(f, us);
}
}.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.SHOW_FILE_ACCESS +
"&" + FileFolderTaskServlet.FILE_ID + "=" + fileId +
"&" + FileFolderTaskServlet.FILE_INFO + "=" +
fileInfo);
} else if (action.equals(EDIT_MY_TASKS)) {= new
FileFolderServiceImpl(url, driver, user, password);[] taskIds =
request.getParameterValues("tasks");tsi = new TasksServiceImpl(url,
driver, user, password);(taskIds != null) {[] checkedTasks = new
MyTask[taskIds.length];
(int i = 0; i < taskIds.length; i++) {[i] = new
MyTask(Long.parseLong(taskIds[i]));
}<MyTask> allMyTasks = tsi.showMyTasks(u);(int i = 0; i
< allMyTasks.size(); i++) {t = allMyTasks.get(i);tId = t.getId();checked =
false;(int j = 0; j < taskIds.length; j++) {
if (tId == Long.parseLong(taskIds[j])) {
checked = true;
break;
}
}finished = tsi.isTaskFinished(t);(checked) {
if (!finished) {
tsi.taskIsFinished(t);
}
} else {
if (finished)
tsi.taskIsNotFinished(t);
}
}
} else {<MyTask> allMyTasks = tsi.showMyTasks(u);(int i
= 0; i < allMyTasks.size(); i++) {t = allMyTasks.get(i);finished =
tsi.isTaskFinished(t);(finished)
tsi.taskIsNotFinished(t);
}
}.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.MY_TASKS);
} else if (action.equals(EDIT_MY_ADDED_TASKS)) {= new FileFolderServiceImpl(url,
driver, user, password);[] taskIds =
request.getParameterValues("tasks");tsi = new TasksServiceImpl(url,
driver, user, password);(taskIds != null) {[] checkedTasks = new
MyTask[taskIds.length];
(int i = 0; i < taskIds.length; i++) {[i] = new
MyTask(Long.parseLong(taskIds[i]));
}<MyTask> allMyAddedTasks =
tsi.showMyAddedTasks(u);(int i = 0; i < allMyAddedTasks.size(); i++) {t =
allMyAddedTasks.get(i);tId = t.getId();checked = false;(int j = 0; j <
taskIds.length; j++) {
if (tId == Long.parseLong(taskIds[j])) {
checked = true;
break;
}
}finished = tsi.isTaskFinished(t);(checked) {
if (!finished) {
tsi.taskIsFinished(t);
}
} else {
if (finished) {
tsi.taskIsNotFinished(t);
Long toUserId = tsi.getUserOfMyTask(t);
MailLogger ml = new MailLogger();
String mess = "Вы не выполнили задание!";
String address = ugsi.getLogin(toUserId);
ml.postMail(mess, address);
}
}
}
} else {<MyTask> allMyAddedTasks =
tsi.showMyAddedTasks(u);(int i = 0; i < allMyAddedTasks.size(); i++) {t =
allMyAddedTasks.get(i);finished = tsi.isTaskFinished(t);(finished)
tsi.taskIsNotFinished(t);toUserId = tsi.getUserOfMyTask(t);ml
= new MailLogger();mess = "Вы не выполнили задание!";address =
ugsi.getLogin(toUserId);.postMail(mess, address);
}
}.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.MY_ADDED_TASKS);
} else if (action.equals(DELETE_ALL_VERSION)) {= new
FileFolderServiceImpl();fileId = request.getParameter(FILE_ID);f = new
File(Long.parseLong(fileId));fi = new FileInfo(Long.parseLong(fileId));.setFileinfo(fi);[]
deletedId = request.getParameterValues("deleted");(deletedId != null)
{n = (int) (Long.parseLong(deletedId[0]));numb =
ffsi.getNumberOfVersions(f);path1 = ffsi.getFileUrl(f);pathv =
"";(int i = 2; i <= numb; i++) {numToPath = ffsi.getNumberToPathOfVersion(f,
numb);num = path1.indexOf('.');sub1 = path1.substring(0, num);sub2 =
path1.substring(num, path1.length());iS =
String.valueOf(numToPath);(iS.length() == 1)
pathv = sub1 + "#00" + iS + sub2;if (iS.length() ==
2)
pathv = sub1 + "#0" + iS + sub2;if (iS.length() ==
3)
pathv = sub1 + "#" + iS + sub2;.io.File
uploadetFile = new java.io.File(pathv);.delete();
}.deleteAllVersion(f, n);.sendRedirect(request.getContextPath()
+ "/fft?action=" + FileFolderTaskServlet.VERSION + "&"
+ FileFolderTaskServlet.FILE_ID + "=" + fileId);
} else.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.VERSION + "&" +
FileFolderTaskServlet.FILE_ID + "=" + fileId);
} else if (action.equals("testTree")) {= new
FileFolderServiceImpl(url, driver, user, password);folderId =
request.getParameter("dir").replaceAll("\\/",
"");.removeAttribute(FOLDER);.setAttribute(FOLDER, folderId);name =
2;f = new Folder(Long.parseLong(folderId));ff =
ffsi.showFoldersAndFilesFromFolder(u, f);
out = response.getWriter();
.print("<ul>
// All dirs(Folder folder: ff.getFolders())
{.print("<li>
+ folder.getName() + "</a></li>");
}
// All files(File file: ff.getFiles()) {dotIndex =
file.getName().lastIndexOf('.');ext = dotIndex > 0 ?
file.getName().substring(dotIndex + 1): "";.print("<li>
+ file.getName() + "</a></li>");
}.print("</ul>");
}
}
}
}
(Exception) {= e.getMessage();.setAttribute(MESSAGE,
message);requestDispatcher = request.getRequestDispatcher("/WEB-INF/jsp/message.jsp");.include(request,
response);
}
}
}ru.ksu.eldoc.web;
java.io.File;java.io.IOException;java.util.Iterator;java.util.List;java.util.Random;java.util.Date;
javax.servlet.ServletException;javax.servlet.RequestDispatcher;javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;
org.apache.commons.fileupload.FileItem;org.apache.commons.fileupload.disk.DiskFileItemFactory;org.apache.commons.fileupload.servlet.ServletFileUpload;ru.ksu.eldoc.services.impl.UserGroupServiceImpl;ru.ksu.eldoc.services.impl.FileFolderServiceImpl;ru.ksu.eldoc.objects.User;ru.ksu.eldoc.objects.Group;ru.ksu.eldoc.objects.FileInfo;ru.ksu.eldoc.objects.Folder;
class Upload extends HttpServlet {Random random = new
Random();
String url;String driver;String user;String password;String
path;
static final String LOGIN = "login";static final
String PASSWORD = "password";static final String EXIT =
"exit";static final String MAIN_PAGE = "mainPage";static
final String UPLOADMESSAGE = "message";static final String USURNAME =
"uSurname";static final String UNAME = "uName";static final
String PATRONYMIC = "patronymic";static final String JOB =
"job";static final String NEW_DOCUMENT =
"newDocument";static final String NEW_DOCUMENT_IN_FOLDER =
"newDocumentInFolder";static final String NEW_VERSION =
"newVersion";static final String CREATE_DOCUMENT =
"createDocument";static final String CREATE_VERSION =
"createVersion";
static final String NEW_FILE = "newfile";static
final String FILE_NAME = "fileName";static final String FILE_COMMENT
= "comment";static final String FOLDER_TO_FILE =
"ftf";static final String FOLDER_ID = "folderId";static
final String DAYS_OF_STORAGE = "storage";static final String NEWFILE
= "newFile";static final String FILE_ID = "fileId";static
final String VERSION_NUMBER = "vNumber";static final String
DELETE_FILE = "deleteFile";static final String PAGE =
"page";static final String FOLDER = "folder";
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");=
getInitParameter("rootFolder");
}void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session =
request.getSession();ugsi;ffsi;(action == null) action = NEW_DOCUMENT;message =
"";{login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);
(login == null).sendRedirect(request.getContextPath() +
"/auth");{(action != null) {= new UserGroupServiceImpl(url, driver,
user, password);u = ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB,
u.getJob());(action.equals(NEW_DOCUMENT_IN_FOLDER)) {folderId = (String)
session.getAttribute(FOLDER);.setAttribute(FOLDER_ID,
folderId);.setAttribute(FOLDER_ID, folderId);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/newDocumentInFolder.jsp");.include(request,
response);
} else if (action.equals(NEW_VERSION)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);requestDispatcher
= request.getRequestDispatcher("/WEB-INF/jsp/newVersion.jsp");.include(request,
response);
} else if (action.equals(DELETE_FILE)) {fileId =
request.getParameter(FILE_ID);folderId =
request.getParameter(FOLDER_ID);.ksu.eldoc.objects.File f = new
ru.ksu.eldoc.objects.File(Long.parseLong(fileId));= new
FileFolderServiceImpl(url, driver, user, password);
path1 = ffsi.getFileUrl(f);pathv = "";uploadetFile
= new File(path1);.delete();numb = ffsi.getNumberOfVersions(f);(int i = 2; i
<= numb; i++) {num = path1.indexOf('.');sub1 = path1.substring(0, num);sub2
= path1.substring(num, path1.length());iS = String.valueOf(i);(iS.length() ==
1)= sub1 + "#00" + iS + sub2;if (iS.length() == 2)= sub1 +
"#0" + iS + sub2;if (iS.length() == 3)= sub1 + "#" + iS +
sub2;= new File(pathv);.delete();
}.deleteFile(f);page =
request.getParameter(PAGE);(Long.parseLong(page) ==
1).sendRedirect(request.getContextPath() + "/fft?action=" +
FileFolderTaskServlet.MY_ADDED_FILES);(Long.parseLong(page) ==
2).sendRedirect(request.getContextPath() + "/fft?action=" +
FileFolderTaskServlet.FOLDER_CONTENTS + "&" +
FileFolderTaskServlet.FOLDER_ID + "=" + folderId);
}
}
}
}(Exception e) {= e.getMessage();.setAttribute(UPLOADMESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
}
}void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session =
request.getSession();ugsi;ffsi;(action == null) action = MAIN_PAGE;message =
"";isVersion = false;{login = (String)
session.getAttribute(LOGIN);pass = (String) session.getAttribute(PASSWORD);
(login == null).sendRedirect(request.getContextPath() +
"/auth");{= new UserGroupServiceImpl(url, driver, user, password);u =
ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB, u.getJob());
//проверяем является ли полученный запрос multipart/form-data
boolean isMultipart =
ServletFileUpload.isMultipartContent(request);(!isMultipart)
{.sendError(HttpServletResponse.SC_BAD_REQUEST);;
}
factory = new DiskFileItemFactory();
// Максимальный буфера данных в байтах,
// при его привышении данные начнут записываться на диск во временную
директорию
// устанавливаем один мегабайт
factory.setSizeThreshold(1024 * 1024);
// устанавливаем временную директорию
File tempDir = (File) getServletContext().getAttribute("javax.servlet.context.tempdir");
factory.setRepository(tempDir);
//Создаём сам загрузчик
ServletFileUpload upload = new ServletFileUpload(factory);
//максимальный размер данных который разрешено загружать в байтах
//по умолчанию -1, без ограничений. Устанавливаем 10 мегабайт.
upload.setSizeMax(1024 * 1024 * 10);urlbd;
folderId = "";
error = false;fileId = "";{fName =
"";comment = "";days = "";
items = upload.parseRequest(request);iter =
items.iterator();name = "";item;
(iter.hasNext()) {= (FileItem) iter.next();(item.isFormField())
{//если текущий элемент не файл= item.getFieldName();//имя параметраvalue =
item.getString();//значение параметра(name.equals("n1")) {=
value;(fName.equals(""))
error = true;
} else if (name.equals("n2")) {= value;
} else if (name.equals("n3")) { = value;
}
} else {
//в противном случае рассматриваем как файл
if (action.equals(CREATE_DOCUMENT)) {size = item.getSize();=
request.getParameter(FOLDER_ID);= false;= processUploadedFile(item, isVersion,
"");fi;d = new Date();(days.length() != 0) {
fi = new FileInfo(u, d, Long.parseLong(days), size);
} else {
fi = new FileInfo(u, d, size, 1);
}folder = new
Folder(Long.parseLong(folderId));((!urlbd.equals("")) &&
(!fName.equals(""))) {
ru.ksu.eldoc.objects.File f = new ru.ksu.eldoc.objects.File(fName,
comment, folder, fi, urlbd);
ffsi = new FileFolderServiceImpl(url, driver, user,
password);
ffsi.addFile2(f);
} else {
error = true;
}
} else if (action.equals(CREATE_VERSION)) {=
request.getParameter(FILE_ID);= true;= processUploadedFile(item, isVersion,
fileId);d = new Date();
(!urlbd.equals("")) {
ru.ksu.eldoc.objects.File file = new
ru.ksu.eldoc.objects.File(Long.parseLong(fileId));
ffsi = new FileFolderServiceImpl(url, driver, user,
password);
ffsi.setVersionOfFile(file, u, comment);
} else {
error = true;
}
}
}
}
}(Exception) {= e.getMessage();.setAttribute(UPLOADMESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
}(error) { = "Заполните все поля, отмеченные звездочкой!";
request.setAttribute(UPLOADMESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
} else if (action.equals(CREATE_DOCUMENT))
{.sendRedirect(request.getContextPath() + "/main");
} else if
(action.equals(CREATE_VERSION)).sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.VERSION + "&" +
FileFolderTaskServlet.FILE_ID + "=" + fileId);
}
}(Exception e)
{= e.getMessage();.setAttribute(UPLOADMESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
}
//перенаправляем на страницу с уведомлением о успешной загрузке файлов
}
String processUploadedFile(FileItem item, boolean isVersion,
String fileId) throws Exception {(item.getSize() == 0) {"";
}
path1 = "";
uploadetFile = null;(!isVersion) {
//выбираем файлу имя, пока не найдём свободное
do {= path + random.nextInt() + item.getName();= new
File(path1);
} while (uploadetFile.exists());
} else {.ksu.eldoc.objects.File f = new
ru.ksu.eldoc.objects.File(Long.parseLong(fileId));ffsi = new
FileFolderServiceImpl(url, driver, user, password);fUrl = ffsi.getFileUrl(f);
num = fUrl.indexOf('.');sub1 = fUrl.substring(0, num);sub2 =
fUrl.substring(num, fUrl.length());numb = ffsi.getNumberToPath(f) + 1;numbS =
String.valueOf(numb);(numbS.length() == 1)= sub1 + "#00" + numbS +
sub2;if (numbS.length() == 2)= sub1 + "#0" + numbS + sub2;if
(numbS.length() == 3)= sub1 + "#" + numbS + sub2;= new File(path1);
}
//создаём файл.createNewFile();
//записываем в него данные
item.write(uploadetFile);
path1;
}
void processFormField
(FileItem) {.out.println(item.getFieldName() + "="
+ item.getString());
}
}
ru.ksu.eldoc.web;
ru.ksu.eldoc.services.impl.*;ru.ksu.eldoc.objects.*;
javax.servlet.http.HttpServlet;javax.servlet.http.HttpServletRequest;javax.servlet.http.HttpServletResponse;javax.servlet.http.HttpSession;javax.servlet.ServletException;javax.servlet.RequestDispatcher;java.io.IOException;java.io.File;java.io.FileInputStream;java.util.List;java.util.Iterator;
org.apache.commons.fileupload.FileItem;org.apache.commons.fileupload.disk.DiskFileItemFactory;org.apache.commons.fileupload.servlet.ServletFileUpload;
class Download extends HttpServlet {String url;String
driver;String user;String password;String path;
void init() throws ServletException {.init();=
getInitParameter("url");= getInitParameter("driver");=
getInitParameter("user");= getInitParameter("password");=
getInitParameter("rootFolder");
}
static final String LOGIN = "login";static final
String PASSWORD = "password";static final String USURNAME =
"uSurname";static final String UNAME = "uName";static final
String PATRONYMIC = "patronymic";static final String JOB =
"job";static final String USER_ID = "uId";static final
String DOWNLOAD = "download";static final String DOWNLOAD_FILE =
"downloadFile";static final String DOWNLOAD_VERSION =
"downloadVersion";static final String VERSION_NUMBER =
"versionNumber";static final String FILE_ID =
"fileId";static final String PATH = "path";static final
String UPLOADMESSAGE = "message";static final String FOLDER_ID =
"folderId";static final String FILEINFO = "fileinfo";
void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();ugsi;ffsi;message
= "";{login = (String) session.getAttribute(LOGIN);pass = (String)
session.getAttribute(PASSWORD);
(login == null).sendRedirect(request.getContextPath() +
"/auth");{(action != null) {
= new UserGroupServiceImpl(url, driver, user, password);u =
ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB, u.getJob());(action.equals(DOWNLOAD)) {
fileId = request.getParameter(FILE_ID);.setAttribute(FILE_ID,
fileId);folderId = request.getParameter(FOLDER_ID);= new
FileFolderServiceImpl(url, driver, user, password);.ksu.eldoc.objects.File file
= new ru.ksu.eldoc.objects.File(Long.parseLong(fileId));fInfo =
ffsi.getInfOfFileToSee(file);.setAttribute(FILEINFO, fInfo);path =
ffsi.getFileUrl(file);.setAttribute(PATH, path);(request, response,
path);.sendRedirect(request.getContextPath() + "/fft?action=" +
FileFolderTaskServlet.FOLDER_CONTENTS + "&" +
FileFolderTaskServlet.FOLDER_ID + "=" + folderId);
} else if (action.equals(DOWNLOAD_VERSION)) {fileId =
request.getParameter(FILE_ID);.setAttribute(FILE_ID, fileId);number =
request.getParameter(VERSION_NUMBER);= new FileFolderServiceImpl(url, driver,
user, password);.ksu.eldoc.objects.File file = new ru.ksu.eldoc.objects.File(Long.parseLong(fileId));
numberToPath = ffsi.getNumberToPathOfVersion(file,
Integer.parseInt(number));
path = ffsi.getFileUrl(file);pathv = "";num =
path.indexOf('.');sub1 = path.substring(0, num);sub2 = path.substring(num,
path.length());iS = String.valueOf(numberToPath);(iS.length() == 1)= sub1 +
"#00" + iS + sub2;if (iS.length() == 2)= sub1 + "#0" + iS +
sub2;if (iS.length() == 3)= sub1 + "#" + iS + sub2;(request,
response, pathv);.sendRedirect(request.getContextPath() +
"/fft?action=" + FileFolderTaskServlet.VERSION + "&" +
FileFolderTaskServlet.FILE_ID + "=" + fileId);
}
}
}
}(Exception e) {= e.getMessage();.setAttribute(UPLOADMESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
}
}
void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{.setCharacterEncoding("utf-8");.setContentType("text/html");action
= request.getParameter("action");session = request.getSession();ugsi;ffsi;message
= "";isVersion = false;{login = (String)
session.getAttribute(LOGIN);pass = (String) session.getAttribute(PASSWORD);
(login == null).sendRedirect(request.getContextPath() +
"/auth");{= new UserGroupServiceImpl(url, driver, user, password);u =
ugsi.getUserInfo(login);.setAttribute(USURNAME,
u.getSurname());.setAttribute(UNAME, u.getName());.setAttribute(PATRONYMIC,
u.getPatronymic());.setAttribute(JOB, u.getJob());
(action.equals(DOWNLOAD_FILE)) {path =
request.getParameter(PATH);factory = new DiskFileItemFactory();
// Максимальный буфера
данных в байтах,
// при его привышении данные начнут записываться на диск во временную
директорию
// устанавливаем один мегабайт
factory.setSizeThreshold(1024 * 1024);
// устанавливаем временную директорию
File tempDir = (File) getServletContext().getAttribute("javax.servlet.context.tempdir");
factory.setRepository(tempDir);
upload = new ServletFileUpload(factory);items =
upload.parseRequest(request);iter = items.iterator();name = "";item;=
(FileItem) iter.next();saveAs = item.getString();= "Документ
скачан";.setAttribute(UPLOADMESSAGE, message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
}
}
}
(Exception e)
{= e.getMessage();.setAttribute(UPLOADMESSAGE,
message);requestDispatcher =
request.getRequestDispatcher("/WEB-INF/jsp/uploadMessage.jsp");.include(request,
response);
}
}void dowload(HttpServletRequest request, HttpServletResponse
response, String path) throws IOException {file = new File(path);fin = new
FileInputStream(file);available = fin.available();[] buffer = new
byte[available];.read(buffer);.close();
num = path.indexOf('.');sub2 = path.substring(num + 1,
path.length());(sub2.equals("doc")).setContentType("application/msword");if
(sub2.equals("jpg") ||
sub2.equals("JPG")).setContentType("image/jpg");if
(sub2.equals("bmp")).setContentType("image/bmp");if
(sub2.equals("xls")).setContentType("application/vnd.ms-excel");if
(sub2.equals("pdf")).setContentType("application/pdf");if
(sub2.equals("gif")).setContentType("image/gif");if
(sub2.equals("zip")).setContentType("application/zip");if
(sub2.equals("ppt")).setContentType("application/vnd.ms-powerpoint");if
(sub2.equals("txt")).setContentType("text/plain");.getOutputStream().write(buffer);.getOutputStream().close();
}
}
ПРИЛОЖЕНИЕ 4
Служебные классы, отвечающие за рассылку оповещений на электронную почту
MailLoggerru.ksu.eldoc.web;
javax.mail.*;javax.mail.internet.InternetAddress;javax.mail.internet.MimeMessage;java.util.Properties;
class MailLogger {static final String SMTP_HOST_NAME =
"smtp.mail.ru";
static final String subject = "Log Message";static
final String from = "lenakonfeta88@mail.ru";
// Add List of Email address to who email needs to be sent
tostatic final String[] recipients = {"lenakonfeta88@mail.ru"};
void postMail(String message, String recipient) throws
MessagingException {debug = false;
//Set the host smtp addressprops = new
Properties();.put("mail.smtp.host",
SMTP_HOST_NAME);.put("mail.smtp.auth", "true");auth = new
SMTPAuthenticator();session = Session.getDefaultInstance(props, auth);
.setDebug(debug);
// create a messagemsg = new MimeMessage(session);
// set the from and to addressaddressFrom = new
InternetAddress(from);.setFrom(addressFrom);addressTo = new
InternetAddress(recipient);.setRecipient(Message.RecipientType.TO, addressTo);
// Setting the Subject and Content
Type.setSubject(subject);.setContent(message, "text/plain;
charset=windows-1251");.send(msg);
}
}
ru.ksu.eldoc.web;
javax.mail.Authenticator;javax.mail.internet.InternetAddress;javax.mail.internet.MimeMessage;java.util.Properties;javax.mail.PasswordAuthentication;
class SMTPAuthenticator extends Authenticator {static final
String SMTP_AUTH_USER = "lenakonfeta88";static final String
SMTP_AUTH_PWD = "zgecmrf";
PasswordAuthentication getPasswordAuthentication() {username
= SMTP_AUTH_USER;password = SMTP_AUTH_PWD;new PasswordAuthentication(username,
password); } }
Приложение 5
Описание некоторых функций из ключевых сервисов по работе с БД
1. Показать список файлов из папки
public List<File> showFilesFromFolder (User user,
Folder folder) throws ClassNotFoundException, IOException, SQLException
{connection = getConnection();statement;f;<File> result = new
ArrayList<File>();allow = false;{=
connection.prepareStatement("SELECT fileId FROM FILES WHERE
folderId=?");.setLong(1, folder.getId());resultSet =
statement.executeQuery();(resultSet.next()) {fileId =
resultSet.getLong("fileId");= connection.prepareStatement("SELECT
fullAccess FROM FILES WHERE fileId=?");.setLong(1, fileId);resultSet2 =
statement.executeQuery();.next();fullAccess =
resultSet2.getInt("fullAccess");(fullAccess == 1)= true;{=
connection.prepareStatement("SELECT ga.fileId FROM GROUPACCESS ga,
GROUPSLIST gl WHERE ga.fileId=? AND gl.userId=? AND
ga.groupId=gl.groupId");.setLong(1, fileId);.setLong(2, user.getId());=
statement.executeQuery();(resultSet2.next())= true;{=
connection.prepareStatement("SELECT * FROM USERACCESS WHERE fileId=? AND
userId=?");.setLong(1, fileId);.setLong(2, user.getId());=
statement.executeQuery();(resultSet2.next())= true;
}
}(allow == true) {= connection.prepareStatement("SELECT
fName, comment, url, addDate, size, dayOfStorage, folderId, fi.userId, surname,
uName, patronymic, job FROM FILES f, FILEINFO fi, USERS u WHERE fileId=? AND
fi.userId=u.userId");.setLong(1, fileId);=
statement.executeQuery();.next();fName =
resultSet2.getString("fName");comment =
resultSet2.getString("comment");url = resultSet2.getString("url");surname
= resultSet2.getString("surname");uName =
resultSet2.getString("uName");patronymic =
resultSet2.getString("patronymic");job =
resultSet2.getString("job");size =
resultSet2.getLong("size");dayOfStorage = resultSet2.getLong("dayOfStorage");folderId
= resultSet2.getLong("folderId");userId =
resultSet2.getLong("userId");
u = new User(userId, surname, uName, patronymic, job);fi =
new FileInfo(u, size, dayOfStorage);fol = new Folder(folderId,
folder.getName());= new File(fileId, fName, comment, fol, fi, url);.add(f);=
false;
}.close();
}.close();
}(SQLException sqle) {.out.println("Ошибка
showFilesFromFolder!");.printStackTrace();sqle;
}{
connection.close();
}result;
}
2. Установить версию файла
public void setVersionOfFile(File file, User user, String
comment) throws IOException, ClassNotFoundException, SQLException {connection =
getConnection();statement;{.setAutoCommit(false);=
connection.prepareStatement("SELECT numberOfVersion, numberToPath FROM
FILEINFO WHERE fileId=?");.setLong(1, file.getId());resultSet = statement.executeQuery();.next();numb
= resultSet.getInt("numberOfVersion");numbtoP =
resultSet.getInt("numberToPath");=
connection.prepareStatement("INSERT INTO VERSIONS (fileId, version,
userId, addDate, comment, numberToPath) values (?, ?,?, ?,?,
?)");.setLong(1, file.getId());.setInt(2, numb + 1);.setLong(3,
user.getId());.setTimestamp(4, new Timestamp(new
Date().getTime()));.setString(5, comment);.setInt(6, numbtoP + 1);.execute();=
connection.prepareStatement("UPDATE FILEINFO SET numberOfVersion=?,
numberToPath=? WHERE fileId=?");.setLong(1, numb + 1);.setLong(2, numbtoP
+ 1);.setLong(3, file.getId());.execute();.commit();
}(SQLException sqle) {.printStackTrace();sqle;
}{
connection.close();
}
}
. Удалить выбранную версию файла
public void deleteVersion(File file, int number) throws
IOException, ClassNotFoundException, SQLException {connection =
getConnection();statement;{.setAutoCommit(false);=
connection.prepareStatement("DELETE FROM VERSIONS WHERE fileId=? AND
version=?");.setLong(1, file.getId());.setInt(2, number);.execute();=
connection.prepareStatement("SELECT version FROM VERSIONS WHERE fileId=?
AND version>? ");.setLong(1, file.getId());.setInt(2, number);resultSet
= statement.executeQuery();(resultSet.next()) {versionNumb =
resultSet.getInt("version");=
connection.prepareStatement("UPDATE VERSIONS SET version=? WHERE fileId=?
AND version=?");.setInt(1, versionNumb - 1);.setLong(2,
file.getId());.setLong(3, versionNumb);.execute();
}numb = getNumberOfVersions(file);= connection.prepareStatement("UPDATE
FILEINFO SET numberOfVersion=? WHERE fileId=?");.setInt(1, numb -
1);.setLong(2, file.getId());.execute();.commit();.out.println("Все версии,
кроме заданной, удалены");
}(SQLException sqle) {.rollback();
System.out.println("Ошибка deletVersion!");
sqle.printStackTrace();sqle;
}{connection.close();}
}
. Удалить задание к файлу
public void deleteTaskFromFile(MyTask myTask) throws
IOException, ClassNotFoundException, SQLException {connection =
getConnection();statement;{.setAutoCommit(false);=
connection.prepareStatement("SELECT taskOrder FROM MYTASKS WHERE
myTaskId=?");.setLong(1, myTask.getId());resultSet =
statement.executeQuery();.next();taskOrd =
resultSet.getInt("taskOrder");fileId = myTask.getFile().getId();=
connection.prepareStatement("SELECT myTaskId, taskOrder FROM MYTASKS WHERE
taskOrder>? AND fileId=?");.setLong(1, taskOrd);.setLong(2,
fileId);resultSet1 = statement.executeQuery();(resultSet1.next()) {id =
resultSet1.getInt("myTaskId");taskOrd1 = resultSet1.getInt("taskOrder");=
connection.prepareStatement("UPDATE MYTASKS SET taskOrder=? WHERE
myTaskId=?");.setLong(1, taskOrd1 - 1);.setLong(2, id);
}= connection.prepareStatement("DELETE FROM MYTASKS
WHERE myTaskId=?");.setLong(1, myTask.getId());.execute();.commit();.out.println("Задание к файлу успешно удалено");
}(SQLException sqle) {.rollback();.out.println("Ошибка!");.printStackTrace();sqle;
}{connection.close();}
}